У меня есть приложение c # .net 4, использующее vs 2010.
Я пытаюсь импортировать C ++ DLL (построен на 2005 год).
[DllImport("Card.dll")]
Я получаю провал:
Невозможно загрузить DLL «Card.dll»: приложение не удалось запустить, поскольку его параллельная конфигурация неверна. Пожалуйста, смотрите журнал событий приложения или используйте инструмент командной строки sxstrace.exe для более подробной информации. (Исключение из HRESULT: 0x800736B1)
используя sxstrace.exe я получаю:
ОШИБКА: не удается разрешить ссылку Microsoft.VC80.DebugMFC, processorArchitecture = «x86»
Я также узнал, что:
MFC80D.DLL и MSVCR80D.DLL отсутствуют
Обратите внимание, что это не DebugCRT, поскольку эта проблема была вызвана использованием скомпилированной отладочной библиотеки DLL вместо Release. Теперь я использую DLL-версию, скомпилированную с Release, и проблема в DebugMFC.
Я пробовал все, что мог найти в Интернете. Чтобы сэкономить время, я представлю то, что я попробовал, поэтому я не буду получать эти советы снова:
1- Я установил распространяемый пакет Microsoft Visual C ++ 2010 + SP1 + обновления безопасности
2- Я установил распространяемый пакет Microsoft Visual C ++ 2008
3 — Я установил распространяемый пакет Microsoft Visual C ++ 2005
4 — я пытался запустить это приложение как «Release», а не как «Debug»
5 — Я пытался установить entryPoint для DllImport
Не помогло. Я все еще получаю ту же ошибку. Я не видел никаких других советов в Интернете, кроме перечисленных выше.
Может кто-нибудь мне помочь?
Поскольку в нем говорится «Не удается разрешить ссылку на Microsoft.VC80.DebugCRT, processorArchitecture =» x86 », это означает, что вам не хватает зависимости от времени выполнения отладки crt для VC 8.0. Это означает, что вам нужно создать выпуск, а не отладку, версию карты. .dll. Microsoft не поставляет распространяемый пакет для отладки CRT-приложений. Они поставляются только с Visual Studio. Поэтому создайте выпускную версию card.dll, и это должно помочь в вашей ситуации.
У вас есть контроль над зданием Card.dll
? Если да, посмотрите, как он построен. Он должен быть собран с правильной версией VC ++ (той, которая поставляется с VS 2005) с включенным манифестом. Затем установка Redist 2005 года. Пакет должен решить проблему. Если вы не можете построить Card.dll
самостоятельно, вам придется проанализировать встроенный манифест (если таковой имеется) и связаться с авторами, чтобы решить проблему совместно.
Статическая библиотека по умолчанию ссылается на динамическую среду выполнения.
Если вы пересоберите dll в VS2005, измените Свойства конфигурации | C / C ++ | Генерация кода | Библиотека времени исполнения установка статического времени выполнения, чтобы избежать этой проблемы.
Ты можешь использовать Зависимость Уокер чтобы попытаться выяснить, какие зависимости ваша DLL тянет. Если он говорит, что хочет *d.dll
, то, похоже, это не релизная версия. Попросите своего коллегу проверить конфигурацию сборки.
Для использования отладочной версии вы можете попробовать следующее:
c:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86\
(это для Visual Studio 2008, x86, скорректируйте путь в соответствии с вашей системой).Microsoft.VC90.DebugCRT
а также Microsoft.VC90.DebugMFC
каталоги в каталог с вашим исполняемым файлом.<assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.30729.6161" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
, изменить 9.0.30729.6161
в соответствии с тем, что нужно вашей DLL.Необходимую версию сборки можно найти в выходных данных sxstrace или в *.intermediate.manifest
файл вместе с DLL в своем каталоге сборки. Извините, у меня нет Visual Studio 2005 и я не могу дать точное число.