【发布时间】:2014-01-09 00:38:21
【问题描述】:
我有一个简单的 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.
有谁知道为什么所有东西都加载然后卸载然后找不到?
【问题讨论】:
-
您确定该运行时已安装在部署机器上吗?这可能会帮助stackoverflow.com/questions/9052694/…
-
看起来包装器确实加载了,但是在加载您的应用程序之后然后去卸载它们。是否发生了其他错误?你的代码是什么样的?
-
@dousin .NET Framework 运行时肯定已安装。
-
@simon_at_rcl 我看不到。我没有在我的代码中调用 LoadLibraryExW - 我只是对我的包装器有一个直接的 .NET 引用。
-
如果您使用非托管 c++ dll,它会链接到 msvcr。它与.net 无关。它与 Visual Studio 一起自动安装在开发人员机器上。您必须重新分发它并与您的应用程序一起安装在部署机器上。 Google for vcredist.exe 用于您当前的 Visual Studio 版本。它的副本也驻留在开发人员机器上(在我的 vs2008 情况下:在 %ProgramFiles%\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages 中)
标签: c# c++ dependencies