System.DllNotFoundException: невозможно загрузить DLL в окне 2003

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

Спасибо

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

5 ответов

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

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

Для решения проблемы с загрузкой DLL, я предлагаю вам использовать инструмент http://dependencywalker.com/. Это оказалось полезным при работе с такими проблемами, так как покажет вам точную проблему.

Если у вас есть 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,

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

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

Я обнаружил, что некоторые DLL зависают, когда операционная система нуждается в обновлении. Просто проверьте ожидающие обновления, установите их и / или перезапустите Windows.

После этого замороженные dll-ы освобождаются и проблемы исчезают.

Другие вопросы по тегам