对于如何在这个新安装模型的世界中定位这些工具,客户提出了许多问题。 下面的博客文章将分享许多可用于查找VisualStudio2017实例的选项,并提供各种示例来说明实际的过程。
如何查找安装的VisualStudio 2017实例和C++工具
您可以通过多种方法查找已安装的VS实例并确定为每个实例安装的工具。
1. vswhere.exe : A 独立的 可再发行的本机可执行文件,可用于定位已安装的VisualStudio产品实例,以便在生成和部署脚本中使用。 工具 支持发射不同的格式 到目前为止 包括纯文本、JSON和XML。 例如, 这个 下面的vswhere批处理脚本将找到最新安装版本的根路径 它还包含C++桌面工作负载:
for /f "usebackq tokens=1* delims=: " %%i in (`vswhere.exe -latest -requires Microsoft.VisualStudio.Workload.NativeDesktop`) do (if /i "%%i"=="installationPath" set dir=%%j)
%%目录%% 现在包含根安装路径(如果可用)。
2. PowerShell API :这是查找VS安装实例和组件的最简单API,但当然需要PowerShell v3及更高版本。 如果您运行的是PowerShell v3或v4,则还需要安装 动力壳 . 这已经包含在Windows10附带的PowerShellV5中。 以下命令将列出所有已安装的VS2017实例,这些实例还安装了用于x86和x64的v141工具集:
首先安装VSSetup模块:
Install-Module VSSetup -Scope CurrentUser
完成之后,下面的脚本将列出安装了VisualC++编译器的所有安装实例:
Get-VSSetupInstance | Select-VSSetupInstance -Latest -Require Microsoft.VisualStudio.Component.VC.Tools.x86.x64
3. Visual Studio安装程序API :此COM API允许查询已安装的VS实例和 他们的 来自各种编程语言的组件(C++、C语言、VB)。 代码并不像PowerShell脚本那么简单,但是我们在GitHub上有多个关于如何使用API的示例:
示例:使用API安装具有VisualC++工具集的实例
对于使用C++中的COM API来列出包含Visual C++工具的安装实例的更具体的例子, 在GitHub上查看此示例 .
它在里面 打印包参考 功能 我的示例检查实例中每个安装组件的名称,以确定是否安装了VisualC++工具集(即,如果安装了“微软.VisualStudio.Cudio.VC.Too.x86.x64”)。
//check if instance has VC toolsif (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).";}
如果构建解决方案,将启动一个简单的命令提示符,该命令提示符可以列出安装的VisualStudio实例、它们的组件以及安装了C++工具的实例。 要在使用该工具的计算机上查找VC++构建工具,请选择中的选项#3,它将指示安装了VC++工具的实例:
注: 这个示例不是一个官方工具,它只是为了指导如何利用COM API来定位安装的VisualC++工具。
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.NativeName |
用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工具 |
Windows 10 SDK(10.0.14393.0) | Microsoft.VisualStudio.Component.Windows10SDK.14393 |
c++的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 |
支持C++的Windows XP支持 | Microsoft.VisualStudio.ComponentGroup.NativeDesktop.WinXP |
MFC和ATL支持(x86和x64) | Microsoft.VisualStudio.Component.VC.ATLMFC |
C++/CLI支持 | Microsoft.VisualStudio.Component.VC.CLI.Support支持 |
叮当声/C2(实验性) | Microsoft.VisualStudio.Component.VC.GC2 |
标准库模块 | Microsoft.VisualStudio.Component.VC.Modules.x86.x64 |
难以置信的建筑 | 组件。不可信构建 |
Windows 10 SDK(10.0.10586.0) | Microsoft.VisualStudio.Component.Windows10SDK.10586 |
Windows 10 SDK(10.0.10240.0) | Microsoft.VisualStudio.Component.Windows10SDK.10240 |
Visual C++ 2015.3 V140工具集(x86,x64) | Microsoft.VisualStudio.Component.VC.140 |
通用Windows平台开发
* C++通用Windows平台开发工具 需要安装用于C++ UWP开发,但 不 默认安装。
友好的名字 | 组件名称 |
智能跟踪 | Microsoft.VisualStudio.Component.IntelliTrace.FrontEnd |
用于DirectX的图形调试器和GPU探查器 | Microsoft.VisualStudio.Component.Graphics.Tools工具 |
*C++通用Windows平台开发工具 | *Microsoft.VisualStudio.ComponentGroup.UWP.VC |
Windows 10 SDK(10.0.10240.0) | Microsoft.VisualStudio.Component.Windows10SDK.10240 |
Windows 10 SDK(10.0.10586.0) | Microsoft.VisualStudio.Component.Windows10SDK.10586 |
体系结构和分析工具 | Microsoft.VisualStudio.ComponentGroup.ArchitectureTools.Managed |
用C++开发游戏
友好的名字 | 组件名称 |
C++剖析工具 | Microsoft.VisualStudio.Component.VC.DiagnosticTools工具 |
Windows 10 SDK(10.0.14393.0) | Microsoft.VisualStudio.Component.Windows10SDK.14393 |
Windows 10 SDK(10.0.10586.0) | Microsoft.VisualStudio.Component.Windows10SDK.10586 |
Windows 10 SDK(10.0.10240.0) | Microsoft.VisualStudio.Component.Windows10SDK.10240 |
Windows 8.1 SDK和UCRT SDK | Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Win81 |
难以置信的建筑 | 组件。不可信构建 |
用C++开发手机
友好的名字 | 组件名称 |
安卓NDK(RI 3B) | 组件.Android.NDK.R13B |
Apache Ant(1.9.3) | 组件。蚂蚁 |
Android SDK设置(API级别19和21) | 组件.Android.SDK19 |
Android SDK安装程序(API级别22) | 组件.Android.SDK22 |
Android SDK安装(API级别23) | 组件.Android.SDK23 |
Java SE开发工具包(8.0920.14) | 组件.JavaJDK |
C++ Android开发工具 | 组件.MDD.Android |
谷歌Android仿真器(API级别23) | 组件.Android.Emulator |
英特尔硬件加速执行 | 组件.HAXM |
Android NDK(RI 3B)(32位) | 组件.Android.NDK.R13Bu 3264 |
Android NDK(R12B) | 组件.Android.NDK.R12B |
Android NDK(R12B)(32位) | 组件.Android.NDK.R12Bu 3264 |
Android NDK(R11C) | 组件.Android.NDK.R11C |
Android NDK(R11C)(32位) | 组件.Android.NDK.R11Cu 3264 |
C++ iOS开发工具 | 组件.MDD.IOS |
难以置信的建筑 | 组件。不可信构建 |
Visual C++构建工具
*VisualC++的构建工具 总是 安装VS2017 v141工具集。
友好的名字 | 组件名称 |
*VC++2017 v141工具集(x86、x64) | Microsoft.VisualStudio.Component.VC.Tools.x86.x64 |
Windows 10 SDK(10.0.14393.0) | Microsoft.VisualStudio.Component.Windows10SDK.14393 |
c++的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支持 |
叮当声/C2(实验性) | Microsoft.VisualStudio.Component.VC.GC2 |
标准库模块 | Microsoft.VisualStudio.Component.VC.Modules.x86.x64 |
Windows 10 SDK(10.0.10586.0) | Microsoft.VisualStudio.Component.Windows10SDK.10586 |
Windows 10 SDK(10.0.10240.0) | Microsoft.VisualStudio.Component.Windows10SDK.10240 |
设置命令行环境
Visual Studio 2017中的Developer命令提示符可用于设置中VC++工具集的路径 VCTOOLS安装目录 环境变量。 现在我们发现,已经为安装了VC++编译器工具的每个安装的VS2017实例都有了路径,我们将将此目录引用为
<主持人u arch> 为其构建编译器/链接器的体系结构(即,是否希望cl.exe/link.exe本身能够使用32位或64位地址空间)(x86[默认值],x64)。
下面是一个将命令行生成环境设置为使用以x64为目标的host-x64编译器的示例,将使用以下命令:
我们现在已经配置了命令行构建环境,以便它能够根据我们的首选项(主机/目标)知道正确的VC++工具在哪里。
识别VC++编译器工具版本
在一个VS实例中可以安装多个版本的VC++工具的情况下,我们引入了
您可以签出位于
一次 一
对于我们为host-x64和target-x64安装的工具,路径如下所示:
闭幕词
由于我们已经删除了VS150COMNTOOLS注册表项,以支持可以在同一台机器上并排安装同一产品的多个VS实例的新世界,因此我们知道许多构建系统和工具过去都依赖于此,而新选项并不是完全相同的替代品。 我们正在与库开发人员和其他依赖于VC++编译器工具的构建人员积极合作,我们愿意接受进一步的反馈,以帮助完善和改进上述解决方案。 请分享您在评论中的任何反馈,或随时将更详细的建议发送给 visualc@microsoft.com .