不用等到下一个Visual Studio 的更新包,快来尝试下最新的C++编译工具

[原文发表地址]Try out the latest C++ compiler toolset without waiting for the next update of Visual Studio

[原文发表时间]2016.2.16  Andrew Pardoe [MSFT]

去年十月,我们预发布了Visual C++生成工具,C++生成环境的独立安装包。 我们向你们询问了使用体验反馈,非常感谢大家在博客下面踊跃的留言和其他渠道的反馈。我们将会很快更新VC++ 生成工具并且会将你们的一些建议包含在这个更新包中。

你们所说的关于创建一种轻量级VC++生成工具获取方式的建议离实现不远啦。一些人希望可以通过xcopy的方式获取安装包。另外一些建议使用软件包管理器,或者一个压缩文件。你们的这些反馈都在希望有一种更加容易的方式获取Visual Studio中最新的编译器。

现在,我们要宣布一个新的尝试: 发布VC++工具的NuGet包,它可以被添加到任何的桌面C++工程和解决方案中。安装这个Nuget包,会复制一份新的VC++编译器,头文件,库文件。你可以用这个预览版来编译你的代码,如果你不想再使用这个新工具,你可以只需要卸载这个安装包,然后使用Visual Studio所提供的工具集。

为什么不试试新工具呢? 有很多的新改变包含在今天发布的Visual C++中:包含对C++17新特新的支持比如Coroutines, 对建议的新特性的支持比如C++ Modules,以及标准规格每天修复的bugs。如果你一直在关注我们新特性的进度,又或者等待标准规格的修复,你不需要等到下一个VS Update发布。赶快安装一个NuGet包,这是最快的测试新编译器的方法。

今天我们通过NuGet所提供的体验还非常有限:这只是一个(226MB)安装在一个工程或者一个解决方案中的NuGet包,我们已想到如何让它有更好的用户体验:计算机范围内安装,例如,或者可以让你选择一个主机或者目标平台。我们现在是手动发布这个安装包,但是会考虑自动的方式,这样我们可以进行夜间更新,这会对C++开发者非常有用。

NuGet安装包会安装一个编译器,头文件和库文件,它们会覆盖当前VS版本,但你的工程会继续选择你的VS安装的其他库文件。这个安装包不包含特殊用途的库文件例如ATL或者MFC的库文件,只有当前VS安装的文件是可用的。并且,如果你需要一个新版本的Windows库文件和通用的CRT,你需要安装一个新的Windows Development Kit.

我们希望你尝试这个NuGet安装包并且给我们反馈你最希望我们关注的工程。你可以在这篇博客下面留言,或者直接发邮件给VCNuGetTools@microsoft.com告诉我们。因为是预发布的工程,所以我们无法提供正式的支持,但是我们很高兴帮你解决问题。

在一个C++工程和解决方案中安装预览版的VC++ 工具

对于那些熟悉使用Visual Studio NuGet 的人,服务器的地址是https://vcppdogfooding.azurewebsites.net/nuget. 当前,只有一个安装包,所以你浏览一定能找到的它。

如果你需要一个更加详细的演示,继续往下读吧。现在,你只能本地的为一个工程或者解决方案安装NuGet package. 只需右键工程名或者解决方案。选择“管理Nuget 程序包”。

因为这些安装包并没有放置在NuGet网站,你需要设置一个新的安装包资源站点。点击对话框顶部右边齿轮样的图标:

这时会跳转到选项对话框,打开“程序包源”,点击 + 按钮,添加新的安装包。除此之外,你还得编辑对话框底部的名称和源的内容。输入你喜欢的名字,但是请确保资源是设置为https://vcppdogfooding.azurewebsites.net/nuget/ 。 点击OK按钮,关掉对话框,你会回到NuGet 包管理器。

在对话框的首页选择你的新的安装包资源,点击Browse浏览页面。请确保选中Include prelease的选项框,否则你看不到任何东西。 一旦安装包管理器连接到服务器,你应该能够看到一个叫做VisualCppTools. 在页面的右边选中它,并点击安装按钮。经过几次点击接下来的对话框(请仔细阅读第二个对话框的许可条款),你的Nuget 安装包就会被安装了。

当你重新编译生成你的工程或者解决方案书,你会使用预览版的C++工具。程序员的体验感受并不会有任何变化——智能感应,源文件浏览,调试,这些和以前都是一样的。你只是在使用新的编译器和库文件而已。如果你想回去使用Visual Studio当前自带,所支持的正式的工具集,你只需要回到NuGet安装包管理器对话框,选择安装页面。 你在那里可以完整的卸载预览版的工具集。

使用VC++ 生成工具安装预览版的VC++工具

你正在使用VC++ 生成工具吗?想要通过它尝试预览版的工具集需要做较多的工作,不过都很容易。接下来告诉你怎么做。

首先,你需要获取NuGet命令行工具。所有的下载链接和文档都在这里https://docs.nuget.org/consume/command-line-reference.当你运行nuget.exe ,你要提供资源参数,这个参数要指向服务器,-Prerelease 会启用所有的命令。

下面是安装预览版工具的命令(蓝色显示的命令,输出是用黑色显示的):

C:\tmp>nuget install VisualCppTools -source https://vcppdogfooding.azurewebsites.net/nuget/ –Prerelease

Feeds used: https://vcppdogfooding.azurewebsites.net/nuget/

Attempting to gather dependencies information for package 'VisualCppTools.14.0.23811-Pre' with respect to project 'C:\tmp', targeting 'Any,Version=v0.0'

Attempting to resolve dependencies for package 'VisualCppTools.14.0.23811-Pre' with DependencyBehavior 'Lowest'

Resolving actions to install package 'VisualCppTools.14.0.23811-Pre'

Resolved actions to install package 'VisualCppTools.14.0.23811-Pre'

Adding package 'VisualCppTools.14.0.23811-Pre' to folder 'C:\tmp'

Added package 'VisualCppTools.14.0.23811-Pre' to folder 'C:\tmp' Successfully installed 'VisualCppTools 14.0.23811-Pre' to C:\tmp

最后,如果你想使用预览版工具集的命令行,你要通过编辑它们使它们指向预览版的安装文件夹。最容易的完成的方式就是编辑文件vcbuildtools.bat, 这样你会很容易的找到相同文件夹下面的编译工具命令提示符。在我的系统上,他们的位置是 \Program Files (x86)\Microsoft Visual C++ Build Tools. 如果你的工具在那个文件夹下,你还需要用管理员权限的方式运行你的编辑器(比如,寻找记事本,右击它,选择以管理员权限的方式运行。)

批处理文件中还有很多复杂的命令脚本,但是你只需要增加一行。它会重写VCInstallDir环境变量在注册表之外的值。 这是我的文件的顶部,它定制指向的是我的安装目录c:\tmp,是我用蓝色加的那一行:

@echo off

set curDir=%~dp0

@call :GetWindowsSdkDir

@call :GetWindowsSdkExecutablePath32

@call :GetWindowsSdkExecutablePath64

@call :GetExtensionSdkDir

@call :GetVCInstallDir

@call :GetUniversalCRTSdkDir

set VCInstallDir=C:\tmp\VisualCppTools.14.0.23811-Pre\lib\native\

if not "%UniversalCRTSdkDir%" == "" @set UCRTContentRoot=%UniversalCRTSdkDir%

if not exist "%~dp0..\MSBuild\Microsoft.Cpp\v4.0\v140\" goto error_no_VCTARGETS

cd "%~dp0..\MSBuild\Microsoft.Cpp\v4.0\v140\"

set VCTargetsPath=%cd%\

cd %curDir%

注意,你只是在命令行重写了VCInstallDir的值,因为其他的脚本编译环境变量都是基于VCInstallDir的。 因为其他脚本编译的环境变量都是基于VCInstallDir的。当然还有一种方式更加有效率,那就是停止设置VCInstallDir``而不是重写它,但是这部分就留给读者去自己体验吧。

你安装了这个安装包,重新编辑了vcbuildtools.bat,那么运行任何编译工具的命令行都会调用预览版的工具,你可以通过运行cl –Bv ,很容易的验证编译器的版本和它所运行的文件夹:

C:\Program Files (x86)\Microsoft Visual C++ Build Tools>cl –Bv

Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23811 for x86 Copyright (C) Microsoft Corporation. All rights reserved.

Compiler Passes:

C:\tmp\VisualCppTools.14.0.23811-Pre\lib\native\bin\cl.exe: Version 19.00.23811.0

C:\tmp\VisualCppTools.14.0.23811-Pre\lib\native\bin\c1.dll: Version 19.00.23811.0

C:\tmp\VisualCppTools.14.0.23811-Pre\lib\native\bin\c1xx.dll: Version 19.00.23811.0

C:\tmp\VisualCppTools.14.0.23811-Pre\lib\native\bin\c2.dll: Version 19.00.23811.0

C:\tmp\VisualCppTools.14.0.23811-Pre\lib\native\bin\link.exe: Version 14.00.23811.0

C:\tmp\VisualCppTools.14.0.23811-Pre\lib\native\bin\mspdb140.dll: Version 14.00.23811.0

C:\tmp\VisualCppTools.14.0.23811-Pre\lib\native\bin\1033\clui.dll: Version 19.00.23811.0

cl : Command line error D8003 : missing source filenam

结束语

请尝试使用这个工具,让我们知道你的想法!我们非常高兴这个工具可以被广泛的应用,但是我们需要你们在你们的工作和工程中使用NuGet的VC++ 工具的意见和想法。你可以在这篇博客底下留言,或者发送邮件到VCNuGetTools@microsoft.com.谢谢!