首页 文章

VC 2010和VC 2012 Redistributables Visual Studio 2015安装项目的先决条件

提问于
浏览
2

我安装了Visual Studio 2015,并且我构建了一个.NET 4.6应用程序,该应用程序依赖于某些第三方.NET程序集,这些程序集依赖于某些C DLL和EXE,而这些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版本 . 我认为自this page says以来我不能安装所有合并模块:

我们建议您不要使用合并模块,除非您不必为应用程序提供服务,并且您不依赖于多个版本的DLL . 同一DLL的不同版本的合并模块不能包含在一个安装程序中,并且合并模块使得难以独立于应用程序来维护DLL . 相反,我们建议您安装Visual C Redistributable Package .

如何将这些旧的可再发行组件添加为VS2015安装项目的先决条件?

1 回答

  • 1

    经过几个小时的研究后,我发现在Visual Studio 2015安装项目先决条件对话框中添加项目肯定是可能的 .

    this answer与VS2015更新的Bootstrapper路径(\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ SDK \ Bootstrapper \ Packages)从this MSDN article组合将实现该目标 .

    但是,这将使我得到一个只能在相当大的自定义构建环境中正确构建的安装项目,这在新机器上重现会很棘手 . 我发现没有简单安装的VS附加组件或MS软件包可以添加这种支持 .

    最后,我现在采用的方法是将以下MS合并模块添加到我的安装项目中:

    • Microsoft_VC110_CRT_x86.msm

    • Microsoft_VC110_CRT_x64.msm

    • Microsoft_VC120_CRT_x86.msm

    • Microsoft_VC120_CRT_x64.msm

    这导致运行时DLL部署到C:\ Windows \ System32和C:\ Windows \ SysWOW64,它们似乎工作 . 这不会导致Redistributable出现在Windows "Programs and Features"对话框中 .

    但是,由于MS建议不要使用这种部署运行时的方法,因此我对使用我的VS2015安装项目打包“真正的”VC 2010和VC 2012 Redistributable的任何更易于维护的方法持开放态度 .

相关问题