原文地址:devblogs.microsoft.com/cppblog/fin…
原文作者:
发布时间:2017年3月6日
一直以来,有很多客户询问如何在这种新的安装模式的世界中定位工具。 下面的博文将分享一些可用于定位Visual Studio 2017实例的选项,并提供了各种示例,以说明操作过程。
如何找到已安装的Visual Studio 2017实例和C++工具
有多种方法可以去寻找安装的VS实例,并确定每个实例安装的工具。
1、vswhere.exe。 一个独立的本地可执行文件,可重新分发,可用于定位安装的Visual Studio产品实例,用于构建和部署脚本。 该工具到目前为止支持发出不同的格式,包括纯文本、JSON和XML。 例如,以下vswhere的批处理脚本将找到根路径最新安装的版本,该版本还包含C++ Desktop工作负载。
for /f "usebackq tokens=1* delims=: " %%i in (`vswhere.exe -latest -requires Microsoft.VisualStudio.Workload.NativeDesktop`) do (
if /i "%%i"=="installationPath" set dir=%%j
)
%dir%现在包含根安装路径(如果有的话)。
- PowerShell API。这是寻找VS安装实例和组件的最简单的API,但当然需要PowerShell v3及以上版本。 如果你运行在PowerShell v3或v4上,你还需要安装PowerShellGet。 这已经包含在Windows 10附带的PowerShell v5中。 以下命令将列出所有已安装的VS2017实例,这些实例还安装了x86和x64的v141工具集。
首先安装VSSetup模块。
Install-Module VSSetup -Scope CurrentUser
完成后,下面的脚本将列出所有安装了Visual C++编译器的实例。
Get-VSSetupInstance | Select-VSSetupInstance -Latest -Require Microsoft.VisualStudio.Component.VC.Tools.x86.x64
- Visual Studio Setup API。这个COM API允许从各种编程语言(C++、C#、VB)查询安装的VS实例及其组件。 代码不像PowerShell脚本那么简单,但我们在GitHub上有多个如何消费该API的例子。
例子: 使用API查找安装了Visual C++工具集的实例。
关于使用这个来自C++的COM API来列出包含Visual C++工具的已安装实例的更具体的例子,请查看GitHub上的这个示例。
在PrintPackageReference函数中,我的示例检查了实例中每个已安装组件的名称,以确定是否安装了Visual C++工具集(例如,如果安装了 "Microsoft.VisualStudio.Component.VC.Tools.x86.x64")。
//check if instance has VC tools
if (bstrId == L"Microsoft.VisualStudio.Component.VC.Tools.x86.x64") {
vcToolsFound = true;
std::wcout << L"Instance " << OLE2T(vcInstance) << " contains the VC++ 2017 compiler tools (x86 and x64 targets).\n";
}
如果你构建解决方案,将启动一个简单的命令提示符,可以列出已安装的Visual Studio实例,它们的组件,以及哪些实例安装了C++工具。 要想在使用该工具的机器上找到VC++构建工具,请选择选项#3中的,它将指示哪些实例安装了VC++工具:1。
注意:这个示例不是一个官方工具,只是为了指导如何利用COM API来定位安装的Visual C++工具。
C++安装工作负载和组件
以下是用于描述每个C++工作负载的基础名称表,以及安装程序用于每个工作负载中提供的选项的基础组件名称。 Visual C++ 2017 v141编译器工具集组件(x86和x64目标),即Microsoft.VisualStudio.Component.VC.Tools.x86.x64,作为推荐(预选)组件包含在桌面工作负载中,并且是C++游戏和构建工具工作负载中的必需(始终安装)组件。
| 工作负载 | 安装名称 |
|---|---|
| 用C++进行桌面开发 | Microsoft.VisualStudio.Workload.NativeDesktop |
| 通用Windows平台开发 | Microsoft.VisualStudio.Workload.Universal |
| 用C++进行Linux开发 | Microsoft.VisualStudio.Workload.NativeCrossPlat |
| 用C++开发游戏 | Microsoft.VisualStudio.Workload.NativeGame |
| 用C++进行移动开发 | Microsoft.VisualStudio.Workload.NativeMobile |
构建工具工作量
| MSBuild工具 | Microsoft.VisualStudio.Workload.MSBuildTools |
|---|---|
| Visual C++构建工具 | Microsoft.VisualStudio.Workload.VCTools |
使用C++进行桌面开发
| 友好名称 | 组件名称 |
|---|---|
| VC++ 2017 v141工具集(x86,x64) | Microsoft.VisualStudio.Component.VC.Tools.x86.x64 |
| C++剖析工具 | Microsoft.VisualStudio.Component.VC.DiagnosticTools |
| Windows10 SDK (10.0.14393.0) | Microsoft.VisualStudio.Component.Windows10SDK.14393 |
| 用于CMake的Visual C++工具 | Microsoft.VisualStudio.Component.VC.CMake.Project |
| Visual C++ ATL支持 | Microsoft.VisualStudio.Component.VC.ATL |
| Windows 8.1 SDK 和 UCRT SDK | Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Win81 |
| Windows XP支持C++ | Microsoft.VisualStudio.ComponentGroup.NativeDesktop.WinXP |
| 支持MFC和ATL(x86和x64) | Microsoft.VisualStudio.Component.VC.ATLMFC |
| C++/CLI支持 | Microsoft.VisualStudio.Component.VC.CLI.Support |
| Clang/C2 (实验) | Microsoft.VisualStudio.Component.VC.ClangC2 |
| 标准库模块 | Microsoft.VisualStudio.Component.VC.Modules.x86.x64 |
| IncrediBuild | Component.Incredibuild |
| Windows10 SDK (10.0.10586.0) | Microsoft.VisualStudio.Component.Windows10SDK.10586 |
| Windows10 SDK (10.0.10240.0) | Microsoft.VisualStudio.Component.Windows10SDK.10240 |
| Visual C++ 2015.3 v140工具集(x86, x64) | Microsoft.VisualStudio.Component.VC.140 |
通用视窗平台开发
*C++通用Windows平台开发需要安装C++ UWP开发工具,但默认不安装。
| 友好名称 | 组件名称 |
|---|---|
| IntelliTrace | Microsoft.VisualStudio.Component.IntelliTrace.FrontEnd |
| 用于DirectX的图形调试器和GPU剖析器 | Microsoft.VisualStudio.Component.Graphics.Tools |
| *C++通用Windows平台开发工具 | *Microsoft.VisualStudio.ComponentGroup.UWP.VC |
| Windows10 SDK (10.0.10240.0) | Microsoft.VisualStudio.Component.Windows10SDK.10240 |
| Windows10 SDK (10.0.10586.0) | Microsoft.VisualStudio.Component.Windows10SDK.10586 |
| 架构和分析工具 | Microsoft.VisualStudio.ComponentGroup.ArchitectureTools.Managed |
用C++开发游戏
| 友好名称 | 组件名称 |
|---|---|
| C++剖析工具 | Microsoft.VisualStudio.Component.VC.DiagnosticTools |
| Windows10 SDK (10.0.14393.0) | Microsoft.VisualStudio.Component.Windows10SDK.14393 |
| Windows10 SDK (10.0.10586.0) | Microsoft.VisualStudio.Component.Windows10SDK.10586 |
| Windows10 SDK (10.0.10240.0) | Microsoft.VisualStudio.Component.Windows10SDK.10240 |
| Windows 8.1 SDK 和 UCRT SDK | Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Win81 |
| IncrediBuild | Component.Incredibuild |
用C++进行移动开发
友好名称 | 组件名称 Android NDK (RI 3B) | Component.Android.NDK.R13B Apache Ant (1.9.3) | Component.Ant。 Android SDK设置(API级别19和21) | Component.Android.SDK19 安卓SDK设置(API级别22) | Component.Android.SDK22 Android SDK设置(API级别23) | Component.Android.SDK23 Java SE开发包(8.0920.14) | Component.JavaJDK。 C++ Android开发工具 | Component.MDD.Android。 Google Android模拟器(API Level 23) | Component.Android.Emulator。 英特尔硬件加速执行 | Component.HAXM Android NDK (RI 3B) (32bit) | Component.Android.NDK.R13B_3264。 Android NDK (R12B) | Component.Android.NDK.R12B Android NDK (R12B) (32bit) | Component.Android.NDK.R12B_3264。 Android NDK (R11C) | Component.Android.NDK.R11C Android NDK (R11C) (32bit) | Component.Android.NDK.R11C_3264。 C++ iOS开发工具 | Component.MDD.IOS。 IncrediBuild | Component.Incredibuild。
Visual C++构建工具
*Visual C++ Build工具总是安装VS2017 v141工具集。
| 友好名称 | 组件名称 |
|---|---|
| *VC++ 2017 v141工具集(x86, x64) | Microsoft.VisualStudio.Component.VC.Tools.x86.x64 |
| Windows10 SDK (10.0.14393.0) | Microsoft.VisualStudio.Component.Windows10SDK.14393 |
| 用于CMake的Visual C++工具 | Microsoft.VisualStudio.Component.VC.CMake.Project |
| Windows 8.1 SDK 和 UCRT SDK | Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Win81 |
| Visual C++ ATL支持 | Microsoft.VisualStudio.Component.VC.ATL |
| 支持MFC和ATL(x86和x64) | Microsoft.VisualStudio.Component.VC.ATLMFC |
| C++/CLI支持 | Microsoft.VisualStudio.Component.VC.CLI.Support |
| Clang/C2 (实验) | Microsoft.VisualStudio.Component.VC.ClangC2 |
| 标准库模块 | Microsoft.VisualStudio.Component.VC.Modules.x86.x64 |
| Windows10 SDK (10.0.10586.0) | Microsoft.VisualStudio.Component.Windows10SDK.10586 |
| Windows10 SDK (10.0.10240.0) | Microsoft.VisualStudio.Component.Windows10SDK.10240 |
设置你的命令行环境
在Visual Studio 2017中的开发者命令提示符可以用来设置VCToolsInstallDir环境变量中VC++工具集的路径。 现在我们发现有每个安装了VC++编译器工具的VS2017实例的路径,我们将把这个目录称为<VSInstanceDir>。 这个脚本的位置如下。
<VsInstanceDir>Common7/Tools/vsdevcmd.bat [-arch=<tgt_arch>] [-host_arch=<host_arch>]
<tgt_arch> 是生成的二进制文件将在其上运行的架构(x86 [默认],x64,arm)。
<host_arch>是编译器/链接器构建的架构(即你希望cl.exe/link.exe,本身能够利用32位或64位地址空间)(x86[默认],x64)。
下面是一个例子,将设置命令行构建环境,使用针对x64的host-x64编译器,将使用以下命令。
<VsInstanceDir>Common7/Tools/vsdevcmd.bat -arch=x64 -host_arch=x64
现在我们已经配置了命令行构建环境,这样它就可以根据我们的偏好(主机/目标)知道正确的VC++工具在哪里。
识别VC++编译器工具的版本
在一个VS实例中可以安装多个版本的VC++工具的世界里,我们引入了<VCToolsVersion>的概念,它表示该VS安装实例的VC++工具的默认版本。 如果你打算手动组装路径到VC++工具集目录,我们需要知道安装工具的默认版本,才能得到完整的路径。
<VCToolsVersion>在两个文件中找到,一旦你有了<VSInstanceDir>就可以找到。
<VsInstanceDir>VCAuxiliary/Build/Microsoft.VCToolsVersion.default.[txt|props]
你可以查看位于<VsInstanceDir>/Common7/Tools/vsdevcmd/ext/vcvars.bat的批处理脚本,作为VS Developer Command Prompt如何做的例子。
一旦确定了<VCToolsVersion>值,就可以手动构建完整的VC++工具路径,如下所示。
<VsInstanceDir>VC/Tools/MSVC/<VCToolsVersion>/binHost<host_arch><tgt_arch>
对于我们安装的host-x64和target-x64的工具,路径如下。
<VSInstanceDir>\VC\ToolsMSVC\14.10.24930\bin\HostX64\x64
闭幕词
由于我们已经删除了VS150COMNTOOLS注册表键,以支持同一产品的多个VS实例可以并排安装在同一台机器上的新世界,我们知道许多构建系统和工具在过去都依赖于此,而新的选项并不是完全相同的替换。 我们正在积极与库开发者和其他依赖VC++编译器工具的构建系统合作,我们对进一步的反馈持开放态度,以帮助完善和改进上述解决方案。 请在评论中分享您的任何反馈意见,或将更详细的建议发送到 visualc@microsoft.com。
通过www.DeepL.com/Translator(免费版)翻译