如何正确部署托管/非托管C ++库

时间:2011-11-15 16:00:31

标签: c# deployment .net-4.0 c++-cli

我有一个主要用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。我正在安装可再发行的。

2 个答案:

答案 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很好但其他库因某些原因没有加载。跟着兔子走下洞。