2016-03-31 28 views
2

我有一个第三方C++程序集,我需要在我的C#项目中使用它。因此,我为C++程序集编写了一个C++/CLI包装器。一切都在我的开发机器上编译和运行。如何在另一台计算机上使用C++/CLI程序集运行项目?

但是,当我将我的bin目录的内容复制到我们的其他机器之一时,它崩溃了。原因是,它无法加载我的C++/CLI-Wrapper程序集。它给出了典型的消息:FileNotFoundException: Could not load file or assembly 'MyWrapperAssembly' or one of its dependencies.

所以我做了一些调查:我确信,找不到MyWrapperAssembly,并向assembly resolve event添加事件处理程序。在该处理程序中,我加载了MyWrapperAssembly for reflection only。然后我加载了所有的referenced assemblies。只有MyWrapperAssembly的加载才能起作用。所以我相信,该文件可以找到。但是,当我尝试加载它

Assembly.LoadFrom("hiddenDirectory\MyWrapperAssembly.dll"); 

它崩溃与上面提到的错误FileNotFoundException: Could not load file or assembly 'MyWrapperAssembly' or one of its dependencies.

由于反射仅负荷工作,我确信一定有什么问题在C++层。我在开发机器和测试机器上比较了C++ Redistributable的已安装版本,并注意到有一些软件包丢失。所以,我下载并安装这些软件包的测试机上:

,并没有工作。然后我测试了6台不同的电脑。我的程序在3台电脑上运行,在另外3台电脑上崩溃。唯一能区分PC的是Microsoft Visual C++ 2010 Runtime。安装后,它似乎工作。

但我无法找到该软件包在互联网上的安装程序。所以我在一台PC上安装了Visual Studio 2013,在那里我的程序崩溃了。在我安装Visual Studio(以及C++ Runtime)之后,我的程序运行。

所以我假设我需要C++运行时。我们的客户PC上不需要Visual Studio。所以我需要部署C++运行时。但问题是:

从哪里获得Visual C++运行时?

还是有人知道我是否错过了另一件事?

+0

您可能需要安装.NET框架/运行时间 – OMGtechy

+0

还要检查您的C++代码是否以发布模式编译。我在尝试在目标机器上运行在Debug中编译的本地C++时遇到问题,因为有不同的vc运行时库 – MDK

+0

@OMGtechy:安装了.NET框架。 –

回答

1

如果您使用Visual Studio 2013,则需要2013运行时,而不是2010运行时。

Visual C++ Redistributable Packages for Visual Studio 2013

+0

在其运行的机器上,仅安装了2010运行时。所以我认为,我需要至少一个安装的运行时。 –

+1

@ Rico-E no,你需要运行时匹配已编译的程序 – OMGtechy

+1

@ Rico-E如果它适用于安装2010运行时,那么你的问题是什么?您已经知道它在哪里以及如何下载它,只要确保它与您的程序一起安装即可。 –

1

你可以从这里最新的运行时间:The latest supported Visual C++ downloads

您需要至少与您用来构建C++/CLI项目的VS版本匹配的那个(所以如果您使用VS2010,则需要VC++ 2010运行时)。

然后,如果您打包的C++库也需要VC++运行库,那么您也必须安装该库。图书馆提供者应该告诉你这些依赖关系。

请注意,如果您链​​接到第三方.lib文件,则应该使用它们用于编译它的相同VS版本。否则,你最终会同时使用两个不同的运行时间,这可能会导致问题。 C++/CLI将不得不使用兼容manged的运行时,但如果版本匹配,则不太可能导致麻烦。

相关问题