Ошибка импорта C # Dll: & quot; Приложению не удалось запуститься, поскольку его параллельная конфигурация неверна & quot;

У меня есть приложение 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

Не помогло. Я все еще получаю ту же ошибку. Я не видел никаких других советов в Интернете, кроме перечисленных выше.
Может кто-нибудь мне помочь?

6

Решение

Поскольку в нем говорится «Не удается разрешить ссылку на Microsoft.VC80.DebugCRT, processorArchitecture =» x86 », это означает, что вам не хватает зависимости от времени выполнения отладки crt для VC 8.0. Это означает, что вам нужно создать выпуск, а не отладку, версию карты. .dll. Microsoft не поставляет распространяемый пакет для отладки CRT-приложений. Они поставляются только с Visual Studio. Поэтому создайте выпускную версию card.dll, и это должно помочь в вашей ситуации.

5

Другие решения

У вас есть контроль над зданием Card.dll? Если да, посмотрите, как он построен. Он должен быть собран с правильной версией VC ++ (той, которая поставляется с VS 2005) с включенным манифестом. Затем установка Redist 2005 года. Пакет должен решить проблему. Если вы не можете построить Card.dll самостоятельно, вам придется проанализировать встроенный манифест (если таковой имеется) и связаться с авторами, чтобы решить проблему совместно.

3

Статическая библиотека по умолчанию ссылается на динамическую среду выполнения.

Если вы пересоберите dll в VS2005, измените Свойства конфигурации | C / C ++ | Генерация кода | Библиотека времени исполнения установка статического времени выполнения, чтобы избежать этой проблемы.

3

Ты можешь использовать Зависимость Уокер чтобы попытаться выяснить, какие зависимости ваша DLL тянет. Если он говорит, что хочет *d.dll, то, похоже, это не релизная версия. Попросите своего коллегу проверить конфигурацию сборки.

Для использования отладочной версии вы можете попробовать следующее:

  1. Перейти к c:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86\ (это для Visual Studio 2008, x86, скорректируйте путь в соответствии с вашей системой).
  2. Скопируйте Microsoft.VC90.DebugCRT а также Microsoft.VC90.DebugMFC каталоги в каталог с вашим исполняемым файлом.
  3. Настройте версию сборки в файлах манифеста в скопированных каталогах (объявление выглядит так: <assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.30729.6161" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>, изменить 9.0.30729.6161 в соответствии с тем, что нужно вашей DLL.
  4. Попробуйте запустить приложение.

Необходимую версию сборки можно найти в выходных данных sxstrace или в *.intermediate.manifest файл вместе с DLL в своем каталоге сборки. Извините, у меня нет Visual Studio 2005 и я не могу дать точное число.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector