System.DllNotFoundException: невозможно загрузить DLL в окне 2003 - PullRequest
9 голосов
/ 19 января 2010

У меня есть c ++ dll, использующийся в моем проекте на c #. Он отлично работает на моем компьютере с Windows XP, но когда я копирую свой отладочный проект на сервер Windows 2003 (x64), я получаю сообщение об ошибке ниже, может кто-нибудь сказать мне, что это проблема, и как я могу это исправить.

Спасибо

"System.DllNotFoundException: невозможно загрузить DLL 'lib.dll': это приложение не удалось запустить из-за неправильной конфигурации приложения. Повторная установка приложения может решить эту проблему" *

Ответы [ 4 ]

13 голосов
/ 19 января 2010

Жалуется, что у него проблемы с поиском ЭЛТ-библиотеки.Сначала убедитесь, что DLL содержит требуемый манифест.В Visual Studio File + Open + File выберите DLL и убедитесь, что она содержит узел RT_MANIFEST.Следующая проблема заключается в том, что вы не можете развернуть отладочную сборку вашей DLL.Он будет зависеть от отладочной версии CRT, вы не сможете установить ее на целевой машине.

Либо разверните сборку Release вашей DLL, либо скомпилируйте DLL с параметром / MT, чтобыЭЛТ статически связана.Project + Properties, C / C ++, генерация кода, библиотека времени выполнения.Это не будет работать, если DLL была скомпилирована с параметром / clr.

7 голосов
/ 19 января 2010

Для проблемы с загрузкой DLL, я предлагаю вам использовать инструмент Dependency Walker . Он оказался ценным при решении таких проблем, поскольку покажет вам точную проблему.

Если у вас есть Visual Studio 2005, вы можете найти его в C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin\depends.exe.

Обновление:

MSVCR90D.DLL - это отладочная версия среды выполнения Visual C ++ 9.0. Он должен использоваться только для целей отладки. Я настоятельно рекомендую создать выпускную версию вашей библиотеки, чтобы избежать проблемы загрузки DLL. Однако, если вам абсолютно необходимо развернуть отладочную версию, вы найдете все необходимые библиотеки DLL в C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86.

3 голосов
/ 19 января 2010

Является ли lib.dll 32-битной DLL? Ваша C # программа будет работать на x64 изначально, но не сможет загружать 32-битные DLL. Вы можете попробовать изменить целевой процессор проекта C # на «x86», чтобы заставить его работать под WOW64.

3 голосов
/ 19 января 2010

звучит так, как будто вы не установили среду выполнения Visual C ++ на целевой машине. Вы можете установить это с здесь Поскольку он, похоже, использует отладочные версии этих библиотек, возможно, вам также нужно сначала собрать приложение в режиме выпуска? В этом посте и в этом есть и другие предложения, которые могут помочь ...

...