在部署时,dev计算机上运行App将不会运行

时间:2014-01-07 17:14:31

标签: c# c++ dependencies

我有一个简单的C#4.5.1 x64应用程序,它通过/ clr C ++包装器调用非托管dll。 App在我的开发机器上运行良好。如果我复制到Windows Server 2008或Windows Server 2012(安装了Framework 4.5.1),则会收到包装器无法加载的错误。

我在部署机器上安装了DependencyWalker,我得到了这个:

LoadLibraryExW("MyWrapper.dll", 0x000.., LOAD_WITH_ALTERED_SEARCH_PATH) called from ...
Loaded "MyWrapper.dll" at ... Successfully hooked module.
Loaded "XX.dll" at ... Successfully hooked module. (Dependency for MyWrapper.dll)
Loaded "YY.dll" at ... Successfully hooked module. (Dependency for MyWrapper.dll)
Unloaded "MyWrapper.dll"
Unloaded "XX.dll"
Unloaded "YY.dll"
LoadLibraryExW("MyWrapper.dll", 0x000.., LOAD_WITH_ALTERED_SEARCH_PATH) returned null. The specified module cannot be found.

有谁知道为什么一切都被加载然后卸载然后找不到?

1 个答案:

答案 0 :(得分:2)

确保已安装所有必需的可再发行组件(vcredist.exe)并部署发布版本。

任何非托管c / c ++ dll以及c ++ / cli dll链接到msvcr。它随开发人员计算机上的Visual Studio自动安装。它必须与应用程序一起安装在部署机器上。确保重新分发与VS的版本(和Service Pack)对应的正确vcredist.exe版本。对于vs2008,它位于%ProgramFiles%\ Microsoft SDKs \ Windows \ v6.0A \ Bootstrapper \ Packages中。注意:如果使用LoadModule()加载或者使用c#中的[DllImport(“Sample.dll”)]加载方法,则Dependency walker不会显示缺少的dll。在这种情况下,直接在Dependency walker中打开非托管dll并检查缺少的deps。确保非托管dll位于您应用的搜索路径中。