2

我有一个第 3 方 C++ 程序集,我需要在我的 C# 项目中使用它。因此,我为 C++ 程序集编写了一个 C++/CLI 包装器。一切都在我的开发机器上编译并运行良好。

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

所以我做了一些调查:我确定找不到 MyWrapperAssembly ,并在程序集解析事件中添加了一个事件处理程序。在该处理程序中,我加载 MyWrapperAssembly仅用于反射。然后我加载了所有引用的程序集。MyWrapperAssembly 的仅反射加载有效。所以我确信,可以找到该文件。但是当我尝试加载它时

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

它因上述错误而崩溃FileNotFoundException: Could not load file or assembly 'MyWrapperAssembly' or one of its dependencies.

由于仅反射负载起作用,因此我确定 C++ 层中一定有问题。我比较了我的开发机器和测试机器上安装的 C++ Redistributable 版本,并注意到缺少一些包。所以我在测试机上下载并安装了这些包:

它没有用。然后我测试了 6 台不同的 PC。我的程序在 3 台 PC 上运行,而在另外 3 台 PC 上崩溃。唯一区别这些 PC 的是Microsoft Visual C++ 2010 Runtime. 安装后,它似乎可以工作。

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

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

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

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

4

2 回答 2

1

您可以从此处获取最新的运行时:最新支持的 Visual C++ 下载

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

然后,如果您要包装的 C++ 库还需要一个 VC++ 运行时,那么您也必须安装它。库提供者应该告诉你依赖关系。

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

于 2016-03-31T15:14:08.533 回答
1

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

适用于 Visual Studio 2013 的 Visual C++ 可再发行包

于 2016-03-31T14:37:32.573 回答