Microsoft Visual C++ 运行时版本?我需要把它们全部保留吗?

2024-02-26

我环顾四周,不确定是否能找到明确的答案,所以如果之前有人问过这个问题,我很抱歉;我的“Google-Fu”让我失望了。

我们正在针对 .NET Framework 开发软件,但从历史上看,我们必须包含许多第三方组件。此外,从历史上看,这些往往与 Microsoft Visual Studio C++ 运行时版本有各种依赖关系。这导致我们将分发作为初始安装过程的一部分:

Microsoft Visual Studio C++ 2005 Redistributable (SP1) - build 8.0.61001
Microsoft Visual Studio C++ 2008 Redistributable       - build 9.0.30729.6161
Microsoft Visual Studio C++ 2010 Redistributable       - build 10.0.40129
Microsoft Visual Studio C++ 2012 Redistributable       - build 11.0.61030

但随着时间的推移,我们使用的许多第 3 方组件已被更新、更好的组件所取代,并且我们通过 NuGet 将它们包含到我们的项目中。我发现,当我在没有安装上述内容的系统上安装我们的软件时,我们的大多数应用程序都可以正常运行,没有错误。所以我开始认为上面的很多内容都不再需要了。

理想情况下,我只想把它们全部扔掉。减轻我们的支持人员在设置首次使用机器时安装所有这些组件以及我们的软件的压力。

如果我能告诉他们那就太好了“看,只需安装 VC++ 可再发行版本 xyz,任何需要上述四个版本之一的东西都可以正常工作”

我在网上看到很多资源声称,例如,2017 年的可再发行版本取代了 2015 年的版本,等等,但是这种向后兼容性是否可以一直追溯到 2005 SP1 版本?

我的第二个问题有点笼统,但我并不期望对此有很多答案。

您知道是否有任何知名的第 3 方开发人员工具正在使用我上面列表中提到的四个可再发行组件之一?例如,我们使用 Crystal Reports 运行时 13.0.17 - 哦,我多么希望我们能够转储它并继续......并且我们的一位支持人员已经确定了这一点有时如果缺少 2005 SP1 运行时,将无法安装。试图从在线资源中查找此类信息就像大海捞针一样......


2017 年的可再发行版本取代了 2015 年的版本,依此类推

是的,对于“等等”的某些值;-) 2015 年、2017 年和 2019 年可再发行文件与其最新版本是二进制兼容的。引用微软的话Visual Studio 2015、2017 和 2019 之间的 C++ 二进制兼容性 https://learn.microsoft.com/en-us/cpp/porting/binary-compat-2015-2017?view=vs-2019:

由任何这些版本的编译器 [2015、2017、2019] 编译的运行时库和应用程序都是二进制兼容的。它反映在 C++ 工具集的主编号中,所有三个版本都是 14。 [...] 假设您有 Visual Studio 2015 构建的第三方库。您仍然可以在 Visual Studio 2017 或 2019 构建的应用程序中使用它们。无需使用匹配的工具集重新编译。最新版本的 Microsoft Visual C++ Redistributable 包(Redistributable)适用于所有这些。


这种向后兼容性是否可以一直追溯到 2005 SP1 版本?

不,再次引用同一页面:

Visual Studio 2013 及更早版本中的 Microsoft C++ (MSVC) 编译器工具集不保证跨版本的二进制兼容性。您无法链接目标文件、静态库、动态库和不同版本构建的可执行文件。 ABI、对象格式和运行时库不兼容。

更糟糕的是,VS 2005 和 2008 没有one一组可再发行组件,而是以 SxS(并排)模式安装的多个不同版本。从并排组装 https://en.wikipedia.org/wiki/Side-by-side_assembly:

Windows 并行地将 DLL 的多个版本存储在 Windows 目录的 WinSxS 子目录中,并根据需要加载它们。这减少了包含并排清单的应用程序的依赖性问题。 [...]
Microsoft Visual C++ 2005 和 2008 将 SxS 与所有 C 运行时库一起使用。


您知道是否有任何知名的第 3 方开发人员工具正在使用我上面列表中提到的四个可再发行组件之一?

对于任何有用的答案来说,这太宽泛了。您必须 (a) 确定哪些工具/组件/等you正在使用,以及 (b) 各自的依赖项,包括(但不限于)C/C++ 运行时。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Microsoft Visual C++ 运行时版本?我需要把它们全部保留吗? 的相关文章

随机推荐