2013-03-05 2 views
2

У меня проблемы с одной очень сложной dll. Я использую стороннюю dll, чтобы заставить приложение Windows работать с веб-камерой. Приложение отлично работает на моем ПК с VS2012, на моем ноутбуке с VS2012, но оно вообще не работает в Windows XP, работающем на виртуальной машине.
Я получаю сообщение JIT
C# приложение с библиотекой C++ System.IO.FileNotFoundException

System.IO.FileNotFoundException: Could not load file or assembly '---, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified. 

Чтобы предотвратить многие вопросы я отвечу сам:
Да, DLL, сделать копию в папку с .exe
Да, я развернуть это как "Release"
Да, я скомпилировать приложение в качестве целевой платформы x86
Да, Я сделал компиляции DLL в качестве целевой платформы x86
Да, я установить VCRedist все версии целевой Windows XP
Да, я установить .NET от 3.0 до 4.0 целевой Windows XP


Я просто не могу понять, почему мой компьютер с Visual Studio может работать с этой DLL, но XP не может.

+0

не означает быть плотным, но вы говорите, что вы получаете * буквального * «---, Version = ...» сообщение во время выполнения? Я имею в виду три тире, а не имя сборки? Понятно, что некоторые исследования с помощью Process Monitor были бы очень полезны здесь, чтобы идентифицировать требуемый модуль, но не найти его под XP. –

+0

Да, я был буквальным с именем dll, это WebCamLib.dll – linuxod

+0

И проверили ли вы, что сборка находится в виртуальной коробке? Если это так, то другие предложения здесь, чтобы попробовать DepWalker (или Process Monitor), являются хорошим следующим шагом. –

ответ

2

0: Dependency Walker был бы полезным инструментом для определения того, какая из них отсутствует в вашей DLL, и, следовательно, не позволяет XP загружать его.

Вы создали свою собственную C++ DLL с помощью набора инструментов «v110_xp» (набор инструментов Visual Studio 2012 - Windows XP, который вы получаете с обновлением 1)? Если вы этого не сделали, это ваша проблема. По умолчанию код C++, построенный в VS2012 с использованием стандартной конфигурации компилятора v110, генерирует исполняемый файл, который не будет работать в Windows XP, но требует Vista или более поздней версии.

+0

Hell yeah, перекомпиляция DLL с использованием набора инструментов v110_xp, абсолютно выполнила трюк. Извините за столь поздний ответ, был установлен для многих обновлений. Спасибо за помощь. – linuxod

0

Обратите внимание на «или один из его зависимостями» фраза ... Вот, наверное, ваш вопрос, а не длл это сам

библиотеки DLL, вероятно, вызывая некоторые API или с помощью библиотеки DLL, которые не доступны в XP.

Dependency walker ваш друг здесь

+0

Dependency Walker всегда показывает IESHIMS.DLL и WER.DLL для любой DLI, которую я ему кормлю, это бесполезно в этой ситуации – linuxod