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

时间:2014-10-20 11:14:27

标签: c++ visual-studio visual-studio-2013

我们的产品是使用Visual Studio 2013无更新构建的。我想将我们的构建机器更新到Visual Studio 2013 Update 3。

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

2013版Update 3版本的可再发行版是否需要通过补丁重新分发?

redistrubutables的不同更新版本是否兼容,是否支持此方案?

1 个答案:

答案 0 :(得分:1)

肥皂盒

  

我们产品的修补安装将包含使用不同版本构建的dll和exes的混合...

你已经遇到了问题:我们的政策是总是一起修补所有。分布式的每一组(我们的)C ++二进制文件都是完全自包含的,我们不会对任何一组C ++二进制文件进行部分更新 - 有太多机会可能会破坏,而与VC运行时问题无关。

(当然,如果您的模块在C DLL API后面“防火墙”,那就不同了。)

关于问题

从2010年开始,我了解Microsoft C(++)运行时库的方式,它们都被安装到“System32”中,并且每个主要版本都有版本,所以通常一个Windows系统只有一个单组VS2013 Redist已安装并可用于所有使用默认设置的应用程序(即不会清除清单和WinSxS)。

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

尽管如此,我认为你会帮忙将(最新的)VCRedist包含在你的补丁中,以排除由旧版本引起的任何潜在错误,这些错误只会出现在客户机器上。

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