2014-10-20 88 views
2

我们拥有使用Visual Studio 2013进行构建而不需要更新的产品。我想将我们的生成器更新到Visual Studio 2013 Update 3.Visual Studio C++可再发行组件兼容性

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

可重新分发的2013 Update 3版本是否需要使用补丁重新分发?

Redistrubutables的不同更新版本是否兼容,并且此方案是否受支持?

+1

IIRC对于VS2013 C++运行时,只有一组(x86,x64和ARM);我不知道有运行时组件的更新。你是否有VS2013和VS2013.3 C++运行时的链接? – Niall 2014-10-20 11:25:13

+0

@Niall - 你可能是对的,也许只有一个版本!我意识到,对于Visual Studio 2012来说,不同的更新有不同的运行时版本...至少对于Update 4来说,所以我假设 - 也许不正确 - 也会在2013年。 – 2014-10-20 11:35:02

回答

1

肥皂盒

一个补丁安装我们的产品将包含与不同版本的内置的DLL和EXE文件的混合...

有你已经有了一个问题:我们的政策是总是补丁一切都是在一起。我们分发的每个(我们的)C++二进制文件都是完全自包含的,我们不会对任何一组C++二进制文件进行部分更新 - 这可能会导致打破许多机会,而与VC运行时问题无关。

(当然,如果您有“防火墙”后面的C DLL API模块,这是不同的东西。)

至于问题

我理解微软下的方式(++)运行时库从2010年起,它们都被安装到“System32”中,并且按照主要版本进行版本管理,所以通常是一个Windows系统只有一套VS2013 Redist,并且可用于所有使用默认设置的应用程序与清单和WinSxS)。

这意味着所有VS2013可重新发布的库必须是完全向前和向后的ABI兼容的,所以如果构建服务器具有与客户机器不同的“次要”redist版本通常应该没有关系。只要所有模块使用DLL VCruntime版本,就可以随时将任何进程加载到任何进程中,因此所有模块都可以看到应该兼容的相同模块。

不过,我认为你会自己帮忙把(最新的)VCRedist加入到你的补丁中,以排除旧版本引起的任何潜在的错误,这些错误只会出现在客户机器上。 (或其他人)无论如何都不能保证它的次要版本太多,所以你最好还是确保客户端机器至少运行你正在使用的版本。

相关问题