我有一个主要用C#编写的控制台应用程序,目标是.Net 4.它还使用了一个C ++ / CLI库,它包装了一个非托管的C ++文件。除了在Win32中构建的C ++?CLI库之外,所有内容都在x86平台的发布模式下构建。
因此,当我在Win 7工作站上调用控制台应用程序时,它可以工作。但是,当我将文件夹移动到我的Win 2003 SP2应用服务器时,它不会加载,声称以下内容:
“System.IO.FileNotFoundException:无法加载文件或程序集”MyWrapper.dll“或其依赖项之一。找不到指定的模块。 文件名:'MyWrapper.dll'“。
我找到了将以下内容添加到app.config中的建议,但它没有帮助:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
我错过了什么?
编辑:.Net 4安装在我的Win 2003 SP2应用服务器上,用纯C#编写的控制台应用程序和目标.Net 4.0可以正常工作。
编辑2:MyWrapper.dll位于同一文件夹中。
编辑3:DependencyWalker显示缺少以下dll:MSVCP100.DLL,MSVCR100.DLL,DWMAPI.DLL。我正在安装可再发行的。
答案 0 :(得分:4)
我的猜测(如果MyWrapper.dll是混合模式程序集):未安装Microsoft Visual C++ 2010 Redistributable Package (x86)。您可以使用http://www.dependencywalker.com/查找丢失的DLL。启动Dependencywalker并打开MyWrapper.dll - 您可以找到任何缺失的DLL。
答案 1 :(得分:1)
首先:你的2003 SP2服务器上实际安装了.NET 4吗?
第二:服务器实际上是x86服务器吗?它可能是IA64 / Itanium CPU吗?因为如果你为x86进行了预优化,它将无法在这样的服务器上运行。我几乎总是建议为所有平台构建,直到你有充分的理由不这样做。
第三:MyWrapper.dll依赖哪些其他库?可能MyWrapper很好但其他库因某些原因没有加载。跟着兔子走下洞。