// Windows · 2026-09-27

Windows MSVC 命令行编译环境一键部署(Scoop Extras #1861)

前言:为什么你搜不到 VS 编译工具

习惯用 Scoop 的 Windows 开发者,在编译 node-gyp、Python C 扩展或原生 C++ 项目时,通常需要一套 MSVC 命令行编译环境(即 BuildTools,不包含 Visual Studio 图形界面)。

执行:

scoop search visual

往往只能搜到老旧的 visualc(VC6,现代项目基本无法使用)。

原因在于:Scoop extras 仓库已经移除了 visual-cpp-build-tools 包。BuildTools 本身需要写入系统目录和注册表,这与 Scoop 的便携化设计理念相冲突,因此不再维护。

本文基于 Scoop Extras Issue #1861 的社区方案,仅安装命令行编译环境,并将构建工具交给 Scoop 管理。

一、一键安装脚本

推荐做法:安装精简版 VCTools,剔除 Visual Studio 自带的旧版 CMake,改用 Scoop 提供的 CMake。

Invoke-WebRequest -Uri 'https://aka.ms/vs/17/release/vs_BuildTools.exe' -OutFile "$env:TEMP\vs_BuildTools.exe"
& "$env:TEMP\vs_BuildTools.exe" --passive --wait --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended --remove Microsoft.VisualStudio.Component.VC.CMake.Project

如果想保留 Visual Studio 内置的 CMake,删掉末尾的 --remove ... 参数即可:

Invoke-WebRequest -Uri 'https://aka.ms/vs/17/release/vs_BuildTools.exe' -OutFile "$env:TEMP\vs_BuildTools.exe"
& "$env:TEMP\vs_BuildTools.exe" --passive --wait --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended

参数简述

  • --passive:静默安装,无需人工点击
  • --wait:阻塞终端,等待安装完成后再返回
  • Microsoft.VisualStudio.Workload.VCTools:最小 MSVC 编译套件,包含 cl.exe、link、Windows SDK,不含 Visual Studio 编辑器 GUI
  • --includeRecommended:安装必需的推荐组件,不能省略
  • --remove Microsoft.VisualStudio.Component.VC.CMake.Project:移除 Visual Studio 自带 CMake,由 Scoop 安装更新版本

重要:vs_BuildTools.exe 是 32 位引导器,在 64 位 Windows 上默认会安装到 C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools。 👉 如果你想安装到 C:\Program Files,需要使用 64 位版本的 VS 引导器。本文不做额外处理,直接适配默认路径。

二、配套 Scoop 工具链

按照 issue 作者的思路,将 cmake/ninja 交给 Scoop 维护:

scoop install cmake ninja

三、注册 vsdev 函数,一键加载 MSVC 环境

Add-Content $PROFILE @'
function vsdev {
    $shell = Get-ChildItem "C:\Program Files","C:\Program Files (x86)" -Recurse -Filter "Launch-VsDevShell.ps1" -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty FullName
    if (-not $shell) { Write-Error "未找到 BuildTools,请确认安装成功"; return }
    & $shell -SkipAutomaticLocation
}
'@

新开终端后,直接执行:

vsdev
cl.exe

如果输出版本号,即代表环境已就绪。

在这里插入图片描述

如果需要 64 位环境,可改用:

Add-Content $PROFILE @'
function vsdev {
    $shell = Get-ChildItem "C:\Program Files","C:\Program Files (x86)" -Recurse -Filter "Launch-VsDevShell.ps1" -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty FullName
    if (-not $shell) { Write-Error "未找到 BuildTools,请确认安装成功"; return }
    & $shell -SkipAutomaticLocation -Arch amd64
}
'@

在这里插入图片描述

四、卸载命令

& "C:\Program Files\Microsoft Visual Studio\Installer\setup.exe" uninstall --passive --wait --productId Microsoft.VisualStudio.Product.BuildTools

补充:本地 Scoop manifest(可选自用)

保存为 vs-buildtools.json,然后执行 scoop install .\vs-buildtools.json:

{
    "version": "17.10",
    "description": "VS2022 BuildTools VCTools (From Scoop Extras #1861)",
    "homepage": "https://visualstudio.microsoft.com/downloads/",
    "license": "Proprietary",
    "url": "https://aka.ms/vs/17/release/vs_BuildTools.exe",
    "hash": "skip",
    "pre_install": "Start-Process \"$dir\\vs_BuildTools.exe\" -ArgumentList '--passive','--wait','--add','Microsoft.VisualStudio.Workload.VCTools','--includeRecommended','--remove','Microsoft.VisualStudio.Component.VC.CMake.Project' -Wait -NoNewWindow",
    "uninstaller": {
        "script": "Start-Process \"$dir\\vs_BuildTools.exe\" -ArgumentList '--uninstall','--passive','--norestart' -Wait -NoNewWindow"
    },
    "bin": [
        {
            "name": "vsdev.ps1",
            "script": "$shell = Get-ChildItem \"C:\\Program Files\",\"C:\\Program Files (x86)\" -Recurse -Filter \"Launch-VsDevShell.ps1\" -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty FullName; if(-not $shell){Write-Error '找不到Launch-VsDevShell.ps1';return}; & $shell -SkipAutomaticLocation"
        }
    ]
}

总结

  1. Scoop extras 不再维护 BuildTools 包,因为 BuildTools 本身不满足 Scoop 的便携原则;
  2. Issue #1861 方案:使用 32 位引导器静默部署精简版 VCTools,默认安装到 Program Files (x86);
  3. CMake/Ninja 交给 Scoop 管理,vsdev 自动探测路径,无需手动维护硬编码地址;
  4. 只安装命令行编译环境,不含 Visual Studio GUI,足以满足 node-gyp、C/C++ 原生编译需求。

原文 https://blog.csdn.net/2301_79518550/article/details/166736482