十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Build Tools for Visual Studio 2022:下载安装、静默部署与排障指南

Build Tools for Visual Studio 2022:下载安装、静默部署与排障指南 很多做 C/C# 开发的朋友都经历过这种尴尬本地项目编译得好好的换一台刚装的纯净机器或者丢到 CI 服务器上一执行构建就报错提示找不到 Microsoft Visual C Build Tools。这时候大部分人的第一反应是去装一个完整版 Visual Studio 2022结果十几 GB 下载完才发现项目要用的其实只是里面那套构建工具链。Build Tools for Visual Studio 2022 解决的就是这个事它把编译器、MSBuild、Windows SDK、.NET SDK 这些真正“干活”的东西从 VS 里单独抽出来去掉 IDE 界面、编辑器、调试器和大部分扩展让你用最小的开销搭出一套可用的 Windows 编译环境。我前几年在团队里负责维护构建机好几次都要在没有任何开发工具的 Windows Server 上临时搭建编译环境。一开始我也踩过坑要么装错版本要么装完还是找不到 v100 工具集要么静默安装参数写错导致 CI 卡死。这篇文章就把我这些年琢磨出来的下载、安装、验证、排障经验完整整理一遍顺带把最近很多人搜的“Android Build Tools 35.0.0”“v100 平台工具集丢失”这类问题也一并说清楚。不管你是只想要个最小编译环境还是要在自动化流水线里拉取构建工具这篇文章都能给你一套可以直接抄作业的方案。1. Build Tools 到底是什么为什么不能随便装个完整版1.1 它和完整版 Visual Studio 2022 的核心区别你可以把 Visual Studio 2022 完整版想象成一台“整车”仪表盘、方向盘、车灯、座椅全都配齐驾驶体验好但占地方。而 Build Tools 就是这台车的“发动机”——MSVC 编译器、MSBuild、Windows SDK、CMake 支持等构建组件都在里面但没有图形界面也没有代码编辑、调试、版本管理那些功能。从实际体验来看两者的体积差距非常明显。完整版 Visual Studio 2022 Community 只勾选“使用 C 的桌面开发”一个工作负载动辄占用 10 GB 以上空间而 Build Tools 如果只装 C 桌面构建组件安装完通常在 24 GB 左右。对于构建服务器、Docker 镜像、临时测试机这类场景这个空间差非常关键而且少了很多不相关的服务进程和后台更新任务环境更干净。另一个关键点是许可证和用途。Visual Studio 2022 Community 对个人开发者和小型团队免费但部分大型企业场景需要购买授权Build Tools 同样是社区许可免费使用它本来就是给编译构建场景准备的授权条件更直接。我见过有人在公司内部流水线上装完整版 VS 来做打包被安全审计问到头大换成 Build Tools 之后很多合规问题就自动消失了。1.2 哪些场景最适合用 Build Tools我总结下来下面几类场景是 Build Tools 的“主力适用区”CI/CD 流水线。Jenkins、GitLab Runner、Azure Pipelines 这类平台在 Windows 节点上执行编译任务只需要命令行能调用 MSBuild 和编译器不需要任何 IDE 功能。Docker 镜像构建。如果需要在 Windows 容器里编译原生代码Build Tools 是官方推荐的基础依赖能让镜像体积小很多。开发机二次隔离。有些项目对环境有严格隔离要求不想往主力 VS 里塞各种老版本的工具集单独装一套 Build Tools 放另一个目录互不干扰。只做安装包或驱动编译的专用机器。不需要写代码只执行打包脚本Build Tools 足够。1.3 先想清楚自己需要哪些组件再动手下载之前最重要的一件事是想清楚你要用 Mac。啊不对是想清楚你到底要构建什么东西。很多安装失败、装完用不了的问题根源都是组件选择阶段少勾了东西。如果你要构建 C 桌面程序那至少需要 MSVC 编译器和 Windows SDK如果你的项目是历史工程平台工具集是 v100 或 v110那还得额外勾选对应的旧版工具集。如果你要构建 .NET 项目需要勾选 .NET 桌面生成工具相关负载。如果你用 Visual Studio 做 Android 开发那又涉及到 Android SDK 与 Android Build Tools 的下载很多人搜“Android Build Tools 35.0.0”就是因为这一块在 VS 里下载不顺畅。有一个我踩了多次的坑Build Tools 安装器默认界面虽然简洁但组件关系其实相当复杂。比如你勾了“使用 C 的桌面开发”之后它默认带的是最新的 MSVC v143 工具集和某个具体的 Windows SDK 版本但你的老项目可能用的是 v142 或者 Windows SDK 17763这些并不会自动全装。所以后面我会专门讲怎么精确指定组件 ID而不是每次都在图形界面里瞎找。2. 下载入口与版本选择别再从第三方站点碰运气2.1 官方下载地址到底长什么样Build Tools for Visual Studio 2022 的官方下载入口在 Visual Studio 官网的下载页面。直接输入 visualstudio.microsoft.com/zh-hans/downloads/ 会看到三四个大按钮包括 Community、Professional、Enterprise以及一个容易被忽略的“所有下载”链接。点进“所有下载”之后往下拉一点就能找到“Visual Studio 2022 工具”分类里面有“Visual Studio 2022 生成工具”英文名是 Build Tools for Visual Studio 2022。点击下载后拿到的文件是vs_BuildTools.exe体积很小通常只有几 MB。这是一个在线引导器它本身不包含实际编译器双击运行后才会去微软服务器拉取你选择的组件。官方页面上还有“Visual Studio 2022 生成工具 预览版”之类的链接除非是主动测试新特性否则别碰预览版。我给团队装环境时见过有人不小心装了预览版工具集结果 MSBuild 版本和 CI 脚本里写死的路径对不上排查了很久。2.2 为什么官方只给一个几 MB 的引导器而不是完整离线包很多第一次接触的人会问为什么官网不直接给一个 5 GB 的完整安装包原因是 Build Tools 的组件组合实在太灵活了不同项目需要的编译器版本、SDK 版本都不一样官方不可能针对每种组合打一个包。所以微软采用的是“引导器 按需下载”模式引导器负责下载和安装你指定的组件只传输真正需要的内容。但这不意味着我们没法做完整离线包。官方提供了--layout参数可以先在一台能上网的机器上把需要的内容全部拉下来形成本地目录再复制到内网或离线环境安装。这个操作我在公司内网部署时非常有用相当于自己做了一个带版本的“离线源”后面所有构建机都可以从这个共享目录安装速度比每台机器都重新联网快得多。2.3 版本号怎么选2022、2019、还是直接上 17.x“Build Tools for Visual Studio 2022”只是一个大的产品线名实际安装后对应的是 Visual Studio 2022 的 17.x 系列版本。截至我写这篇文章的时间最新稳定版大概在 17.8 到 17.10 附近具体你可以在安装器或 Visual Studio Installer 里看到。版本选型上我的建议是新项目直接装当前最新稳定版不要选预览版。老项目如果之前用的是 VS2019 的 v142 工具集可以继续在 VS2022 的 Build Tools 里勾选 v142 兼容组件不一定需要再装一套 2019。如果项目依赖了某些只在 17.x 特定小版本里才修复的问题那就把安装器锁死到对应版本避免后续小版本自动更新带来行为变化。锁版本的方式后面会说到。另外提醒一下搜索词里出现的“visual studio 2022 community”是完整版 IDE它和 Build Tools 不一样。Community 适合日常写代码但不适合当成构建依赖塞给 CI“Build Tools”才是给构建场景用的那个精简货。这两个千万别混为一谈。3. 两种安装方式实操命令行静默安装与图形界面安装3.1 命令行静默安装CI 和自动化场景的首选我是强烈推荐通过命令行方式安装的尤其是你要在多台机器上重复部署的时候。命令行参数固定下来之后整个安装过程就是一条命令的事还能写进脚本统一管理。先把官方引导器下载下来假设放在D:\download\vs_BuildTools.exe。然后以管理员身份打开 PowerShell 或 CMD执行D:\download\vs_BuildTools.exe --installPath D:\BuildTools --add Microsoft.VisualStudio.Workload.VCTools --add Microsoft.VisualStudio.Component.Windows11SDK.22621 --includeRecommended --quiet --wait --norestart我来拆解一下这些参数的含义--installPath指定 Build Tools 的安装目录。我一般习惯独立放到一个非系统盘目录比如D:\BuildTools避免和完整版 VS 混在一个目录里。注意路径不要带空格和中文否则后续脚本处理很痛苦。--add要安装的组件 ID。这里可以写工作负载 ID也可以写单个组件 ID还可以写多个--add我上面就同时加了 C 工作负载和 Windows 11 SDK。--includeRecommended把当前工作负载推荐的相关组件一并装上。缺了它某些可选组件可能不装导致编译时缺头文件。--quiet静默模式不显示图形界面适合自动化。--wait关键参数。安装过程会启动多个子进程加了这个参数父进程才会一直等待安装全部完成并返回退出码。CI 脚本校验退出码就靠它。--norestart不自动重启系统。在服务器上非常重要没人希望装完工具突然重启。这里有一个细节很多人第一次不知道安装器在静默模式下如果遇到需要接受许可证的组件通常会自动接受如果命令是从安装目录之外执行、并且以管理员身份运行时。如果需要显式接受许可证加上--accepteth或规范用语--accepteula参数。但要注意不同版本接受的参数名略有区别新版统一用--accepteula --acceptoutcome等如果你执行时报到“参数不存在”就去微软官方文档查一下当前版本的参数列表。不过大部分情况下只写--includeRecommended就够。3.2 常用工作负载和组件 ID 速查表在命令行安装里最麻烦的就是背组件 ID。我整理了一份我常用的速查表目标组件 ID说明C 桌面开发工作负载Microsoft.VisualStudio.Workload.VCTools包含 MSVC 编译器、CMake、测试工具等最常用Windows 10/11 SDK版本 10.0.22621Microsoft.VisualStudio.Component.Windows11SDK.22621缺这个会报找不到windows.hWindows 10 SDK版本 10.0.19041Microsoft.VisualStudio.Component.Windows10SDK.19041老项目常用.NET 桌面生成工具工作负载Microsoft.VisualStudio.Workload.ManagedDesktopBuildTools构建 .NET Framework / .NET 项目v142 平台工具集Microsoft.VisualStudio.Component.VC.v142.x86.x64兼容 VS2019 时代工具集v100 / v120 平台工具集在“单个组件”里找MSVC v100/120 build tools需要手动勾选命令行对应 ID 不固定我后面单独说Android SDK 和工具Microsoft.VisualStudio.Component.Android.SDK28如果做 Xamarin / MAUI需装这个注意组件 ID 会随版本更新发生变化。每次安装前我建议先用 GUI 安装器跑一遍把需要的组件勾选好它会自动生成一份.vsconfig文件之后用命令行读取这个文件就能精确复现同样的安装集合。这就是微软推荐的配置漂移管理方式。生成.vsconfig的方法很简单在 Visual Studio Installer 的“安装详细信息”页点右上角“更多”菜单选“导出配置”就会生成一个 JSON 文件。后续安装新手机会用D:\download\vs_BuildTools.exe --config D:\configs\cplusplus-build.vsconfig --quiet --wait --norestart用配置文件的优势非常明显团队里所有人装的组件完全一致杜绝“我这边能编译你那边报错”的经典问题。3.3 图形界面安装给偶尔手动搭环境的朋友一条明路虽然命令行更灵活但如果是临时装一台机器图形界面其实更直观。双击vs_BuildTools.exe会看到一个类似 Visual Studio Installer 的界面。里面有工作负载列表常见的有“使用 C 的桌面开发”、“.NET 桌面生成工具”、“适用于 Windows 的 C CMake 工具”等。选中你需要的工作负载后右侧“安装详细信息”面板里能看到子项。这里有两个地方容易被忽略右侧底部可以展开“单个组件”标签在这里搜索并勾选旧版工具集比如“MSVC v142 生成工具 (x86/x64)”“MSVC v120 生成工具”“Windows 10 SDK”。安装位置必须选一个合理路径。我建议独立目录不要安装在包含空格和中文的路径下否则后续写脚本处理 vcvarsall.bat、MSBuild.exe 路径时会很想骂人。点击“安装”后界面会显示下载进度和安装进度。整个过程能直观看到哪个组件下载失败、哪个组件被跳过比静默安装的日志好排查。安装完一般需要重启或者注销一次才能让环境变量彻底生效但如果我们手动配置 PATH也可以不重启。3.4 离线分发包给内网机器准备的“本地缓存”如果你要管理的机器在内网或者网络状况不稳定强烈建议用--layout参数生成一个离线源。这个操作的本质是提前把组件安装包下载到本地目录后续所有机器从这个目录安装不需要每台机器都访问外网。打个比方这就像是你提前去超市把食材全买好装进冰箱后面每次做饭不需要每次都跑超市直接从冰箱拿就行。具体命令D:\download\vs_BuildTools.exe --layout D:\vslayout\vs2022buildtools --add Microsoft.VisualStudio.Workload.VCTools --add Microsoft.VisualStudio.Component.Windows11SDK.22621 --includeRecommended --lang en-US zh-CN执行完会在D:\vslayout\vs2022buildtools下生成一个完整目录里面包含引导器和所有组件安装包。把这个目录分享到内网共享盘其他机器就能直接在共享目录下执行\\build-server\share\vs2022buildtools\vs_BuildTools.exe --installPath D:\BuildTools --quiet --wait --norestart离线布局的目录体积取决于组件数量C 工作负载大概在 68 GB。首次生成比较慢但之后内网机器安装几乎是秒级阶段完成。这个方法我从 2019 年用到现在最省心的一次是 30 台构建机全部通过共享目录装完全程没有一台报网络错误。4. 常见安装与构建问题排查4.1 报错找不到 v100 / v110 / v120 平台工具集根源在哪很多老项目保存在仓库里的.vcxproj文件里写死了平台工具集。比如 GPU 计算老工程、某些工业自动化项目到今天还在用 VS2010 时代的 v100 工具集。你如果拿 VS2022 的 Build Tools 默认环境去编译Visual Studio 的生成工具会直接提示“无法找到 Visual Studio 2010 的生成工具平台工具集 ‘v100’”。这种情况的根源非常简单Build Tools 默认只装了最新的 MSVC v143 工具集并没有装 v100 或 v110。解决思路有两条一条是“补齐旧工具集”一条是“改项目文件”。补齐旧工具集的操作在图形界面里这样走Build Tools 安装器里点“修改”切到“单个组件”标签搜索框输入“v100”会看到“MSVC v100 生成工具”等选项勾选后安装。这种方式的缺点是安装器界面搜索出来的旧工具集组件不一定齐全旧版工具集还可能和系统语言包、运行库冲突装完需要补一些 VC 运行库。改项目文件的方式更轻量。在.vcxproj文件里找到PlatformToolsetv100/PlatformToolset改成PlatformToolsetv143/PlatformToolset或者改成PlatformToolsetClangCL/PlatformToolset用 Clang 编译。注意有些老项目用了大量旧语法或外部依赖直接升级工具集可能引发一堆编译错误。所以改之前一定要在分支里实验别在主干上直接动。4.2 与 Android Build Tools 35.0.0 相关的安装问题最近热搜词里有“Android Build Tools 35.0.0”这跟在 Build Tools 里做 Xamarin / .NET MAUI 跨平台开发的人有关。如果你在 Build Tools 安装界面勾选了“使用 .NET 进行移动开发”或“Android 开发”相关负载Visual Studio Installer 会尝试下载 Android SDK、Android NDK 和构建工具。其中 Android Build Tools 版本号跟随 Google 发布35.0.0 是较新版本。这里最常见的坑是安装过程长时间卡在“正在下载 Android SDK”或者进度条到一半就报错。原因通常是国外的 Android SDK 下载源在国内网络环境下连通性不佳这可以从安装日志里看到具体是哪个 URL 超时。解决方案我习惯用两步走。第一步在 Build Tools 安装器里先只安装基础组件不要勾选 Android 相关负载确保 MSVC 环境先就绪。第二步单独安装 Android SDK Command-Line Tools在命令行里通过sdkmanager下载指定的build-tools;35.0.0和构建所需的 Android SDK API 版本。比如sdkmanager platform-tools platforms;android-35 build-tools;35.0.0这一个步骤能跳过 Visual Studio Installer 的暗坑也让你对 Android 构建版本有精确控制。如果你想用命令行把 Android 负载也装进 Build Tools组件 ID 里搜Android.SDK相关项但说实话我很少在纯构建机上装 Android 开发全套因为会和 Android Studio 抢 SDK 目录得不偿失。4.3 安装日志怎么看静默安装失败后如何定位静默安装最大的问题是看不到界面一旦失败很多人只能干瞪眼。其实 Build Tools 安装器会把详细日志写到%TEMP%目录文件名一般是dd_installer_20240xxx.log这样的格式。安装失败后最有效的动作就是去%TEMP%目录按时间排序找最新的dd_installer_*.log和dd_bootstrapper_*.log。日志里常见的几类信息显示某个组件包下载失败带有 HTTP 状态码或 URL这是网络问题。显示磁盘空间不足日志里会写明确需要多少 MB。显示文件占用冲突比如另一个 MSBuild 进程正在运行这种情况下关掉所有编译任务再重试。如果你在静默模式命令中加了--wait那么安装命令的退出码可以直接用来判断结果。0或3010表示成功3010 是成功但需要重启其他非零值基本代表失败。在 CI 脚本里务必基于退出码做失败判断不要简单看描述文字。4.4 装完执行 msbuild 仍然提示找不到命令有次我在新机器上用 Build Tools 装完 C 工作负载满怀期待地打开 PowerShell 敲msbuild结果提示找不到命令。这不是安装失败而是MSBuild.exe不在当前进程的 PATH 环境变量里。Build Tools 安装完后MSBuild 的真实路径通常在安装目录下的MSBuild\Current\Bin\MSBuild.exe。因为 Build Tools 不像完整版 VS 那样会自动给系统 PATH 追加条目我们需要手动配置。我通常在脚本里动态取路径而不是写死。比如 PowerShell$msbuild D:\BuildTools\MSBuild\Current\Bin\MSBuild.exe $msbuild MyProject.sln /p:ConfigurationRelease如果你确实想全局用msbuild命令就把D:\BuildTools\MSBuild\Current\Bin加到系统 PATH。但要注意如果机器上还装了完整版 VS可能同时存在多个MSBuild.exePATH 里的先后顺序会决定你用哪个版本。我用where.exe msbuild这个命令排查环境混乱问题查到过三次每次都发现是 PATH 顺序被安装器改乱了。还有一点32 位和 64 位 MSBuild 路径略有区别如果你在 64 位系统上跑 32 位进程可能落在MSBuild\Current\Bin\amd64或Bin\MSBuild.exe具体取决于当前环境变量。遇到这种问题最稳的方式是打开“开发者 PowerShell for VS 2022”或执行vcvarsall.bat x64初始化环境官方提供的这一套环境变量初始化脚本能帮你省掉大量手动配置的烦恼。5. 工具链验证与工程化维护建议5.1 安装完成后如何确认工具链真的可用装完不等于一定能编译尤其是手动装到非默认目录时最好花两分钟做一个全链路验证。我每次装完都会走一套“最小 C 项目编译”测试流程如下。先写一个hello.cpp#include iostream int main() { std::cout Build Tools OK std::endl; return 0; }然后打开 PowerShell先初始化环境再调用 cl.exe 编译# 进入安装目录下的 VC\Auxiliary\Build cd D:\BuildTools\VC\Auxiliary\Build # 初始化 x64 原生编译环境 cmd /c vcvars64.bat # 回到项目目录编译 cd D:\temp cl /EHsc hello.cpp hello.exe如果输出Build Tools OK说明编译器、标准库、链接器、C 运行库全部正常。这一步能覆盖大多数组件缺失问题。比如缺 Windows SDK光是预处理阶段就报找不到windows.h缺 MSVC 工具集cl.exe根本不存在。对于 .NET 项目也可以用dotnet build MySolution.sln做验证。注意Build Tools 里只装 .NET 桌面生成工具时命令行里的dotnetCLI 不一定在 PATH 中通常需要到 .NET SDK 安装目录下手动指定或者使用完整版 .NET SDK 安装器再补一份。5.2 把 Build Tools 下载和安装写进仓库告别环境不一致我见过很多团队的“环境安装手册”是一篇十几页的 Word 文档新人照着操作每一步都有概率点错。更现代化的做法是把构建环境当成代码的一部分放进仓库统一管理。具体来说我会在仓库根目录放一个scripts/install-buildtools.ps1脚本param( [string]$ToolsPath D:\BuildTools, [string]$BootstrapperPath D:\download\vs_BuildTools.exe ) if (!(Test-Path $BootstrapperPath)) { Invoke-WebRequest -Uri https://aka.ms/vs/17/release/vs_BuildTools.exe -OutFile $BootstrapperPath } $BootstrapperPath --installPath $ToolsPath --config scripts/buildtools.vsconfig --quiet --wait --norestart if ($LASTEXITCODE -eq 0 -or $LASTEXITCODE -eq 3010) { Write-Host Install succeeded } else { Write-Error Install failed with code $LASTEXITCODE }这个“下载引导器 读取配置文件 静默安装”三步走是团队协作里最稳的状态。新同事拉代码后执行一条 PowerShell 脚本五分钟内就能获得和 CI 完全一致的构建环境再也不用靠运气装软件。buildtools.vsconfig这个 JSON 配置文件我建议跟脚本放一起随仓库版本迭代。以后如果项目升级了 Windows SDK 版本或编译器版本只改这个配置文件就能自动传导到所有开发者。5.3 多版本共存与磁盘控制心得有些公司同时维护多个产品线不同产品用的工具链版本可能不一样。这时候多个 Build Tools 实例共存就很有必要。微软的设计也支持这个场景你可以给每个产品线指定独立的--installPath互不覆盖。我自己的习惯是D:\BuildTools\main最新版工具链用于主项目。D:\BuildTools\legacy旧版工具链用于维护老产品。D:\BuildTools\android带 Android SDK 的构建环境。每个目录对应一个.vsconfig在各自的 CI 配置里调用对应的 MSBuild 或脚本。这套方案跑了大半年没出过环境打架问题比在一台机器上反复修改组件和卸载重装靠谱得多。磁盘控制方面每个 Build Tools 实例装完后临时文件位置在C:\ProgramData\Microsoft\VisualStudio\Packages。如果多台机器都走同一份离线布局我建议在安装命令后加一步清理脚本把C:\Program Files\Microsoft Visual Studio\2022\BuildTools\Common7\IDE\Remote Debugger里不需要的文件删掉能省出 500 MB 以上空间。但这只是锦上添花正常情况下 Build Tools 已经足够精简不需要过度优化。到这里从下载、安装、验证到工程化维护整个 Build Tools for Visual Studio 2022 的使用闭环就完整了。我自己的习惯是把这个环境的搭建脚本固定在仓库里所有机器一视同仁地跑同一套命令版本更新、组件变更都走配置文件和代码审查流程。这样做的直接好处是我再也不用半夜爬起来看某台构建机为什么缺编译器了。如果你也被环境不一致反复折磨强烈建议按文中的方案先跑一遍离线布局和配置导出后续每一步都会顺畅很多。
返回列表