c#应用程序与c + +库System.IO.FileNotFoundException

问题描述:

我遇到了一个非常艰难的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
是,我没有部署它作为“发布”
是的,我编译应用程序作为x86目标平台
是的,我也编译DLL为目标的x86平台
是的,我没有安装vcRedist所有版本以适用于Windows XP
是,我没有安装.NET 3.0〜4.0以适用于Windows XP


我只是找不到为什么我的电脑与Visual Studio可以使用该DLL,但XP不能。

+0

没有意思是密集的,但你说你在运行时得到一个*文字*“---版本= ...”的消息?我的意思是,三个破折号,不是一个大会名称?如果对Process Monitor进行一些调查,在这里可以非常有用地确定正在寻找的模块,但在XP下找不到。 – 2013-03-05 19:03:49

+0

是的,我是文字与dll名称,它是WebCamLib.dll – linuxod 2013-03-05 19:08:53

+0

而且你是否证实程序集是在虚拟框?如果是这样,那么这里尝试使用DepWalker(或Process Monitor)的其他建议是一个好的下一步。 – 2013-03-05 19:13:23

Dependency Walker是使用找出哪些依赖关系是你的DLL缺少的工具,从而防止XP加载它。

您是否使用“v110_xp”工具集(Visual Studio 2012 - 您使用update 1获得的Windows XP工具集)来构建本地C++ DLL?如果你没有,那就是你的问题。默认情况下,使用正常的v110编译器配置在VS2012中构建的C++代码会生成一个在Windows XP上无法运行的可执行文件,但需要Vista或更高版本。

+0

地狱是的,使用v110_xp工具集重新编译DLL绝对有诀窍。对不起,如此迟到的响应,安装到许多更新。感谢您的帮助。 – linuxod 2013-03-06 16:29:07

注意这句话......那可能是你的问题“或它的依赖关系之一”,而不是DLL它的自我

您的DLL可能调用一些API或使用一个DLL,它不提供XP。

Dependency walker这里是你的朋友

+0

依赖沃克始终显示IESHIMS.DLL和WER.DLL为我喂养他的任何DLL,它在这种情况下没用 – linuxod 2013-03-06 16:31:32