#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.