我安装了 Visual Studio 2015,并构建了一个 .NET 4.6 应用程序,该应用程序依赖于一些第三方 .NET 程序集,这些程序集依赖于一些 C++ DLL 和 EXE,而后者又依赖于 Visual C++ 2012 x64 Redistributable。我使用的 SDK 包括一些合并模块,这些模块部署了我所依赖的 SDK 的 .NET 和 C++ 程序集(但不是 Visual C++ 运行时)。
如果目标计算机上未安装 Visual C++ 2012 可再发行组件,我的 .NET 4.6 应用程序会在启动Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'MyManagedDependency.dll' or one of its dependencies. The specified module could not be found.
时崩溃,并说即使我在目标系统上安装了 Visual C++ 2015 可再发行组件也会发生这种情况。因此,C++ 运行时依赖项似乎不向后/向前兼容。
我正在使用 Visual Studio 2015 安装项目为我的应用程序创建安装程序。但是,我可以从中选择的安装程序先决条件列表不包括 Visual C++ 2012 运行时库。我可以选择作为安装项目先决条件的唯一 Visual C++ 库是“Visual C++“14”运行时库”。我相信这些与 Visual C++ 2015 Redistributable 相同,这不足以让我的软件加载。
有没有办法将 Visual C++ 2012 运行时添加到我的 VS2015 安装项目安装程序的先决条件列表中(例如,通过安装更多 SDK)?还是有另一种方法我应该在我的安装程序中打包 2012 C++ 运行时?
编辑:挖掘我正在使用的第三方 SDK 的文档和安装程序包,看起来我的应用程序实际上可能只有在目标系统上同时存在 Visual C++ 2010 和 2012 可再发行组件时才能正确运行。此外,我可能需要同时安装 x86 和 x64 版本。我认为我不能安装所有带有合并模块的模块,因为这个页面说:
我们建议您不要使用合并模块,除非您不必为您的应用程序提供服务并且您不依赖多个版本的 DLL。同一 DLL 的不同版本的合并模块不能包含在一个安装程序中,合并模块使得独立于您的应用程序服务 DLL 变得困难。相反,我们建议您安装 Visual C++ Redistributable Package。
如何将这些较旧的可再发行组件添加为我的 VS2015 安装项目的先决条件?