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

Posted

技术标签:

【中文标题】Visual Studio C++ 可再发行兼容性【英文标题】:Visual Studio C++ Redistributable Compatibility 【发布时间】:2014-10-20 11:14:26 【问题描述】:

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

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

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

可再发行组件的不同更新版本是否兼容,是否支持这种情况?

【问题讨论】:

IIRC VS2013 C++ 运行时只有一套(x86、x64 和 ARM);我不知道运行时组件有更新。你有每个 VS2013 和 VS2013.3 C++ 运行时的链接吗? @Niall - 你可能是对的,也许只有一个版本!我知道对于 Visual Studio 2012,不同的更新有不同的运行时版本......至少对于更新 4,所以我假设 - 也许不正确 - 2013 也会有。 【参考方案1】:

肥皂盒

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

您已经遇到了一个问题:我们的政策是始终所有内容修补在一起。分发的每组(我们的)C++ 二进制文件都是完全独立的,我们不会对任何一组 C++ 二进制文件进行部分更新 - 与 VC 运行时问题无关,有太多可能会发生故障。

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

关于问题

按照我从 2010 年开始理解 Microsoft C(++) 运行时库的方式,它们都安装到“System32”中并根据主要版本进行版本控制,因此通常一个 Windows 系统只有一个单组 VS2013 Redist 已安装并可用于所有使用默认设置的应用程序(即不会与清单和 WinSxS 混淆)。

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

不过,我认为将(最新的)VCRedist 包含在您的补丁中以排除任何由旧版本引起的潜在错误,这些错误只会出现在客户计算机上。

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

【讨论】:

以上是关于Visual Studio C++ 可再发行兼容性的主要内容,如果未能解决你的问题,请参考以下文章

Visual C++ 可再发行包安装在哪里?

安装 redist 时,Qt Creator 4.0.3 报告“警告:在 C:\... 中找不到 Visual Studio 发行版可再发行文件”

安装 - microsoft visual c++ 2003 可再发行包 - 出现错误

如何使我的 Visual c++ 2013 应用程序不需要下载可再发行包?

使用链式安装程序部署 Visual Studio 隔离 shell 应用程序

部署一个 c++ 应用程序,啥可再发行组件