我有一个第 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++ 运行时?
或者有人知道我是否错过了另一件事?