我安装了Visual Studio 2015,并且我构建了一个.NET 4.6应用程序,该应用程序依赖于某些第三方.NET程序集,这些程序集依赖于某些C ++ DLL和EXE,后者依赖于Visual C ++ 2012 x64可再发行。我使用的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版本。我认为自this page says以来我无法安装包含合并模块的所有内容:
我们建议您不要使用合并模块,除非您不必为应用程序提供服务,并且您不依赖于多个版本的DLL。同一DLL的不同版本的合并模块不能包含在一个安装程序中,并且合并模块使得难以独立于应用程序来维护DLL。相反,我们建议您安装Visual C ++ Redistributable Package。
如何将这些较旧的可再发行组件添加为VS2015安装项目的先决条件?
答案 0 :(得分:1)
稍后的几个小时的研究,我发现将项目添加到Visual Studio 2015安装项目先决条件对话框当然是可能的。
将this answer与来自this MSDN article的VS2015更新的Bootstrapper路径(\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ SDK \ Bootstrapper \ Packages)相结合将实现这一目标。
然而,这将使我得到一个只能在相当大量定制的构建环境中正确构建的安装项目,这在新机器上重现会很棘手。我发现没有易于安装的VS附加组件或MS软件包可以添加这种支持。
最后,我现在采用的方法是将以下MS合并模块添加到我的安装项目中:
这导致运行时DLL部署到C:\ Windows \ System32和C:\ Windows \ SysWOW64,它们似乎有效。这会导致 not 导致Redistributable出现在Windows“程序和功能”对话框中。
但是,由于MS建议不要使用这种部署运行时的方法,因此我对使用我的VS2015安装项目打包“真正的”VC ++ 2010和VC ++ 2012 Redistributable的任何更易于维护的方法持开放态度。