System.DllNotFoundException:无法在窗口2003上加载DLL

我在c#项目中使用c ++ dll,它在我的窗口xp机器上运行正常,但是当我在window 2003服务器(x64)上复制我的调试项目时,我收到下面的错误,任何人都可以告诉我这是什么问题,并且我该怎么办呢。

谢谢

“System.DllNotFoundException:无法加载DLL’lib.dll’:此应用程序无法启动,因为应用程序配置不正确。重新安装应用程序可能会解决此问题”

它抱怨它无法找到CRT dll。 首先检查DLL是否包含所需的清单。 在Visual Studio,File + Open + File中,选择DLL并validation它是否包含RT_MANIFEST节点。 下一个问题是您无法部署DLL的调试版本。 它将依赖于CRT的调试版本,您无法在目标计算机上安装它。

部署DLL的Release版本或使用/ MT选项编译DLL,以便CRT静态链接。 项目+属性,C / C ++,代码生成,运行时库。 如果使用/ clr选项编译DLL,则无效。

对于DLL加载问题,我建议您使用Dependency Walker工具。 事实certificate它在处理这些问题时很有价值,因为它会告诉你确切的问题。

如果您拥有Visual Studio 2005,则可以在C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin\depends.exe找到它。

更新:

MSVCR90D.DLL是Visual C ++运行时9.0的调试版本。 它只应用于调试目的。 我强烈建议您构建库的发行版本,以避免DLL加载问题。 但是,如果您绝对需要部署调试版本,则可以在C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86找到所有必需的DLL。

lib.dll是32位DLL吗? 您的C#程序将在本机上运行x64,但无法加载32位DLL。 您可以尝试将C#项目的目标CPU更改为“x86”以强制它在WOW64下运行。

听起来好像你没有在目标机器上安装visual c ++运行时。 你可以从这里安装它因为它似乎是使用这些dll的调试版本或许你还需要首先在发布模式下构建你的应用程序? 这篇文章和这篇 文章有一些其他可能有帮助的建议……