C ++二进制兼容性和无痛升级到Visual Studio 2019

   原文

Visual Studio 2019突破了个人团队生产力的界限。我们希望您会发现这些新功能引人注目,并很快开始升级到Visual Studio 2019。

在您考虑升级时,请放心,Visual Studio 2019使您可以轻松地从以前版本的Visual Studio中移动代码库。这篇文章捕获了为什么升级到Visual Studio 2019将无痛苦的原因。

并行Visual Studio安装

您可以在已安装早期版本的计算机上安装最新版本的Visual Studio,并继续并行使用这两个版本而不会产生干扰。这是尝试Visual Studio 2019或将其用于某些项目的好方法。 Visual Studio Installer允许您从中央UI管理Visual Studio 2017和2019的安装。

Visual Studio Installer图像显示VS 2017和VS 2019并排安装

Visual Studio 2019 IDE中的MSVC v140(VS 2015.3)和MSVC v141(VS 2017)工具集

即使您还没准备好将项目移动到最新的工具集(MSVC v142),您仍然可以在Visual Studio 2019 IDE中加载项目并继续使用当前的旧工具集。

将现有C ++项目加载到IDE中不会升级/更改项目文件。这样,您的项目也会加载到以前版本的IDE中,以防您需要返回或者您的队友尚未升级到VS 2019(此功能也称为项目往返 )。

您框中旧版VS安装的工具集在最新的IDE中作为平台工具集可见。如果您刚开始只在机器上安装了VS 2019,则可以通过自定义C ++ Desktop工作负载(使用Individual Components选项卡列出所有选项)直接从Visual Studio Installer获取这些旧工具集。

VS Installer Individual Components选项卡显示VS 2019中可用的C ++组件的完整列表

新的v142工具集现已推出

在Visual Studio 2019 wave(预览,其一般可用性和未来更新)中,我们计划继续发展我们的C ++编译器和库

  • 新的C ++ 20功能,
  • 更快的构建吞吐量,和
  • 甚至更好的codegen优化。

MSVC v142工具集现已推出,它已经为您提供了一些迁移的激励措施

最新MSVC v142工具集中的VC Runtime与v140和v141二进制兼容

我们清楚地听到了MSVC v141今天快速采用的一个主要原因是它与MSVC v140的二进制兼容性。这允许您按照自己的进度将自己的代码迁移到v141工具集,而无需等待任何第三方库依赖项先迁移。

我们希望保持这种势头,并确保您在MSVC v142上也有类似的成功采用体验。这就是为什么我们今天宣布我们的团队致力于为MSVC v141提供MSVC v141和v140的二进制兼容性

这意味着如果使用v142工具集编译所有代码但仍有一个或多个使用v140或v141工具集构建的库,则将所有这些库(使用最新的链接器)链接在一起将按预期工作。为了实现这一点,VC Runtime不会在VS 2019中更改其主要版本,并且仍然向后兼容以前的VC Runtime版本。

C:sourcereposTimerAppDebug>dumpbin TimerApp2019.exe /IMPORTS | findstr .dll
mfc140ud.dll
KERNEL32.dll
USER32.dll
GDI32.dll
COMCTL32.dll
OLEAUT32.dll
gdiplus.dll
VCRUNTIME140D.dll
ucrtbased.dll
       2EE _seh_filter_dll

当您混合使用不同支持的MSVC工具集版本构建的二进制文件时,您可以使用应用程序重新分发VCRedist的版本要求。具体来说,VCRedist不能比用于构建应用程序的任何工具集版本旧。

无论您使用何种工具集,Vcpkg上的数百个C ++库都可用

如果您今天在VS 2015或VS 2017中使用Vcpkg用于一个或多个开源依赖项,那么您将很高兴地了解到这些库(在撰写本文时接近900)现在可以使用MSVC进行编译v142工具集,可在Visual Studio 2019项目中使用。

如果您刚开始使用Vcpkg,请不要担心--Vcpkg是Microsoft的一个开源项目,旨在帮助简化Windows,Linux和Mac上的开源C ++库的获取和构建

由于v142与v141和v140二进制兼容,因此您已安装的所有软件包也将继续在VS 2019中运行而无需重新编译;但是,我们建议您尽可能重新编译,以便您可以享受我们已添加到v142的新编译器优化!

如果您将VS 2019 Preview与旧版VS(例如VS 2017)并排安装,则Vcpkg将更喜欢稳定版本,因此您需要将Vcpkg的三元组变量VCPKG_PLATFORM_TOOLSET设置为v142以使用最新的MSVC工具集。

MSVC编译器版本更改为19.2x(从MSVC v141中的19.1x)

最后但并非最不重要的是,MSVC v142工具集的编译器部分将其版本更改为19.20 - 与MSVC v141相比,只是次要版本增量。

带有快速信息的VS编辑器显示_MSC_VER宏等于1920
请注意,MSVC编译器和STL从MSVC v141开始支持功能测试宏,它们应该是使代码支持多个MSVC版本的首选选项。

呼吁采取行动

请立即下载Visual Studio 2019 ,告诉我们您的想法。我们的目标是让您尽可能轻松地过渡到VS 2019,因此我们一如既往地对您的反馈非常感兴趣。我们可以通过以下评论或电子邮件( visualcpp@microsoft.com )与我们联系。
如果您遇到Visual Studio或MSVC的其他问题或有任何建议,请通过产品或开发者社区的帮助>发送反馈>报告问题/提供建议告诉我们。您也可以在Twitter上的@VisualC找到我们。