Visual Studio C++可再分发兼容性

Visual Studio C++ Redistributable Compatibility

本文关键字:兼容性 Studio C++ Visual      更新时间:2023-10-16

我们的产品是用Visual Studio 2013构建的,没有更新。我想将我们的构建机器更新到Visual Studio 2013 update 3。

我们为我们的产品发布了补丁和热修复程序,其中包含产品二进制文件的子集。我担心如果我更新我们的构建机器并使用它们生成补丁会发生什么。我们产品的修补安装将包含使用不同版本的编译器构建的dll和exe的组合,这些编译器是针对不同版本的Visual Studio C++Redistributables构建的。

2013年更新3版本的可重新分发软件是否需要使用补丁进行重新分发?

可重新发布的不同更新版本是否兼容,是否支持这种情况?

Soapbox

我们产品的补丁安装将包含使用不同版本构建的dll和ex的混合。。。

你已经遇到了一个问题:我们的政策是总是所有都补丁在一起。分发的每一组(我们的)C++二进制文件都是完全独立的,我们不会对任何一组C++二进制文件进行部分更新——与VC运行时问题无关,有些东西可能会崩溃。

(当然,如果你在一个C DLL API后面有"防火墙"的模块,那就不一样了。)

关于这个问题

从2010年起,我对Microsoft C(++)Runtime库的理解是,它们都安装在"System32"中,并按主要版本进行版本控制,因此通常一个Windows系统只安装了一套VS2013 Redist,可用于所有使用默认设置的应用程序(即,不干扰清单和WinSxS)。

这意味着所有VS2013可再发行库都必须完全向前和向后兼容ABI,因此构建服务器是否具有与客户机器不同的"次要"redist版本通常无关紧要。只要所有模块都使用DLL VC运行时版本,任何时候都只能有一个加载到任何进程中,因此所有模块都看到应该兼容的相同内容。

尽管如此,我认为将(最新的)VCRedist包含在您的修补程序中,以排除旧版本导致的任何潜在错误,这些错误只会在客户机器上显示,这将是对您自己的一种帮助。

根据VCRedist的共享方式,你(或其他任何人)无论如何都不能保证它的次要版本,所以你最好确保客户端机器至少运行你正在使用的最低版本。