二进制兼容性和无忧升级:为什么转换到Visual Studio 2017如此 “容易”
03/27/2017
6 minutes to read
In this article
[原文发表时间]:3/7/2017
这篇博客主要介绍从Visual Studio 2015升级到2017的步骤。正如我们在BUILD 2016会话中谈论的“将C ++代码转移到Visual Studio 2015的6个原因”(点击跳转到1h:04)。在这个版本中,我们团队使代码库移动到Visual Studio 2017非常容易。这里有四个原因。
通过Visual Studio 2017安装程序获取MSVC 2015.3工具集
在Visual Studio 2017中加载使用较老C++工具集的C++工程,并不会改变C++工程。 这允许你在以前的IDE中加载这个工程,以备你需要使用之前的IDE加载工程,或者你仍然有队友把VS没有完全升级到2017。为了使工程在Visual Studio 2017加载中不受到任何影响,就像在以前的版本中,IDE支持工程往返。
在以前的版本中,为了能够构建项目,必须同时安装最新版本和旧版本的Visual Studio。 现在Visual Studio 2017允许您直接安装MSVC 2015(v140)工具集,使其便于引导新机器,通过仅安装所需的工具集而不是整个VS 2015 IDE来减少安装所需的磁盘空间。
MSVC 2017 中的VC运行时与2015二进制兼容
这个版本的Visual Studio中C++编译器和库有很多改进,这将引导您转换到Visual Studio 2017的最新工具集(v141)- 新的标准一致性功能,改进的代码生成功能,更快的构建吞吐量。 然而,您可能担心您的第三方库依赖关系没有准备好这样的跳转。 我们经常听到客户说对于一个新的C++工具集来说这是第一个迁移拦截器(无论它们将依赖性作为二进制文件还是直接作为源)。
但是,使用最新的MSVC工具集,您不需要担心这一点。 这是因为最新的VC运行时与VS 2015的VC运行时二进制兼容。 换句话说,如果你有一个使用v140平台工具集构建的库,现在即使你使用v141 MSVC工具集构建代码,您的二进制文件和使用它的代码也将继续工作。
使用MSVC v141工具集构建的任何二进制文件都将链接到VC运行时的140版本。 VCRedist只是向后兼容,所以你需要使用你的APP在VS 2017中重新发布最新的VCRedist 140。
C:\src\ClockApp\Debug>dumpbin ClockApp.exe /IMPORTS | findstr .dll
mfc140ud.dll
KERNEL32.dll
USER32.dll
GDI32.dll
COMCTL32.dll
OLEAUT32.dll
gdiplus.dll
VCRUNTIME140D.dll
ucrtbased.dll
Vcpkg上的数百个C ++ 库在Visual Studio 2017中可用
如果你还没有听说过VCPkg,不用担心 -- 这是一个来自微软的开源项目,以帮助简化在Windows上的开源库的采集和构建。 如果你在一个或多个开源依赖项上使用Visual Studio 2015中的Vcpkg,那么你会很乐意知道这些库(在编写本文时接近180),使用MSVC v141工具集编译,并可以在Visual Studio 2017工程中使用。
因为v141与v140是二进制兼容的,所有已经有的包将继续工作,而不需要重新编译; 然而,我们建议重新编译,这样你可以体验我们添加到v141编译器的新的优化!
MSVC编译器版本转换为19.1(从Visual Studio 2015中的19.0)
最后很重要的一点,MSVC v141工具集的编译器部分仅在Visual Studio 2017中作为次要版本进行了改进。请注意,我们将继续朝着C++ 一致性以及代码的生成功能方向进行改进。 在进行这些改进后,您可能需要进行某些更改以使您的代码符合标准。 所有这些更改都记录在docs.microsoft.com 的Visual Studio 2017主题中的C++ 一致性改进。
采取行动 Visual Studio 2017具有许多新功能,我们希望您尽快使用。 这就是为什么我们使您的项目从Visual Studio 2015转换变得 “太容易”。今天尝试一下,让我们知道你的想法!
离开这篇博客之前,还请查看其它我们为VS 2017发布活动的宣布帖子,下载Visual Studio 2017,在下面的评论或 developercommunity.visualstudio.com 网站上与我们分享您的反馈。