Исключение при попытке загрузить библиотеку DLL Berkeley DB

#c# #exception #dll #unmanaged #berkeley-db

#c# #исключение #dll #неуправляемый #berkeley-db

Вопрос:

У меня есть приложение .NET 3.5, которое зависит от библиотеки DLL C (Berkeley DB- libdb_csharp51d.dll ) и я могу запустить ее на своем компьютере с Windows 7 без проблем, но я пробовал на двух других компьютерах (Windows Server 2008 и Windows 7), и приложение продолжает получать исключение.

Исключением является:

Система.DllNotFoundException: Не удается загрузить библиотеку DLL ‘libdb_csharp51d’: приложению не удалось запуститься, поскольку его параллельная конфигурация неверна. Пожалуйста, просмотрите журнал событий приложения или воспользуйтесь командной строкой sxstrace.exe инструмент для получения более подробной информации. (Исключение из HRESULT: 0x800736B1)

Сообщение в программе просмотра событий:

Не удалось сгенерировать контекст активации для «C:PathTolibdb_csharp51d.DLL «. Зависимая сборка Microsoft.VC90.DebugCRT,processorArchitecture=»amd64″,publicKeyToken=»AWUe.k,PRvnbjRtZ»,type=»win32″,version=»9.0.21022.8 «не удалось найти. Пожалуйста, используйте sxstrace.exe для подробной диагностики.

(обратите внимание, что я зашифровал токен открытого ключа)

Структура папок как таковая:

C:PathTo
myapplication.exe
немного.DLL
libdb_csharp51d.DLL
кто-то другой.DLL

Я запустил приложение на своей машине, чтобы убедиться, что оно работает нормально, затем я скопировал папку, как она есть, непосредственно на сервер, чтобы не было разницы между содержимым папки между сервером и моей машиной. Я проделал то же самое и с другим компьютером Win7 (все компьютеры 64-разрядные). Изначально я думал, что проблема будет решена, как только я установлю Berkeley DB, но даже после того, как я установил ее, я все еще получал то же исключение.

Кто-нибудь знает, что может быть причиной этой проблемы? Существуют ли какие-либо исправления / обходные пути?

Ответ №1:

Он ищет msvcrtd.dll (или один с номером версии). Она должна быть где-нибудь на компьютере разработчика.

Комментарии:

1. Я установил распространяемый пакет Microsoft Visual Studio C 2008 для x64 с версией файла 9.0.21022.8; кроме того, версия файла совпадает с версией, указанной в сообщении об ошибке события. Все еще получаю то же исключение, что и раньше.

2. Я предполагаю, что DebugCRT необходим, потому что DLL собрана для режима отладки. Если я использую релизную версию библиотеки DLL, могу ли я предположить, что для этого не потребуется DebugCRT?

3. @Lirik, вам нужно использовать выпускную версию библиотеки DLL, распространяемый устанавливает только выпускные библиотеки DLL. Все, что вам нужно сделать, это создать libdb_csharp51d. Библиотека DLL в режиме выпуска и ее развертывания. Отладочная версия CRT не является распространяемым компонентом — то есть, согласно Microsoft, вам не разрешено распространять это самостоятельно. Они считают это частью Visual Studio, и это единственный законный способ получить библиотеку DLL.