【问题标题】:Visual Studio C++ Redistributable CompatibilityVisual Studio C++ 可再发行兼容性
【发布时间】: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 也会有。

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


【解决方案1】:

肥皂盒

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

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

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

关于问题

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 2021-12-27
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多