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

时间:2010-01-19 12:42:04

标签: c# dll dllnotfoundexception

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

由于

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

5 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分:7)

对于DLL加载问题,我建议您使用Dependency Walker工具。事实证明,在处理此类问题时它会很有价值,因为它会向您显示确切的问题。

如果您拥有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。

答案 2 :(得分:3)

听起来您还没有在目标计算机上安装visual c ++运行时。您可以从here安装它。因为它似乎是使用这些dll的调试版本,您可能还需要首先在发布模式下构建您的应用程序? This postthis one还有其他一些可能有帮助的建议......

答案 3 :(得分:3)

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

答案 4 :(得分:0)

我发现当操作系统需要更新时,一些 dll-s 被冻结。 只需检查挂起的更新,安装它们和/或重新启动 Windows。

之后冻结的 dll-s 被释放并且问题消失了。