部署时,在开发计算机上运行应用不会运行

Running App on dev machine won't run when deployed

本文关键字:运行 应用 计算机 开发 部署      更新时间:2023-10-16

我有一个简单的 C# 4.5.1 x64 应用程序,它通过/clr C++包装器调用非托管 dll。应用程序在我的开发计算机上运行良好。如果我复制到 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.

有谁知道为什么所有东西都被加载然后卸载然后找不到?

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

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