我有一个第三方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的已安装版本,并注意到有一些软件包丢失。所以,我下载并安装这些软件包的测试机上:
- Microsoft Visual C++ 2010 Redistributable Package (x86)
- Microsoft Visual C++ 2010 Redistributable Package (x64)
,并没有工作。然后我测试了6台不同的电脑。我的程序在3台电脑上运行,在另外3台电脑上崩溃。唯一能区分PC的是Microsoft Visual C++ 2010 Runtime
。安装后,它似乎工作。
但我无法找到该软件包在互联网上的安装程序。所以我在一台PC上安装了Visual Studio 2013,在那里我的程序崩溃了。在我安装Visual Studio(以及C++ Runtime)之后,我的程序运行。
所以我假设我需要C++运行时。我们的客户PC上不需要Visual Studio。所以我需要部署C++运行时。但问题是:
从哪里获得Visual C++运行时?
还是有人知道我是否错过了另一件事?
您可能需要安装.NET框架/运行时间 – OMGtechy
还要检查您的C++代码是否以发布模式编译。我在尝试在目标机器上运行在Debug中编译的本地C++时遇到问题,因为有不同的vc运行时库 – MDK
@OMGtechy:安装了.NET框架。 –