# msvc-kit
[](https://crates.io/crates/msvc-kit)
[](https://crates.io/crates/msvc-kit)
[](https://github.com/loonghao/msvc-kit/releases)
[](https://opensource.org/licenses/MIT)
[](https://github.com/loonghao/msvc-kit/actions/workflows/ci.yml)
[](https://codecov.io/gh/loonghao/msvc-kit)
[](https://docs.rs/msvc-kit)
---
面向 Rust/Windows 的便携式 MSVC 构建工具安装器与管理器。
## 三步上手
```bash
# 安装 CLI
cargo install msvc-kit
# 下载最新 MSVC + Windows SDK 到默认数据目录
msvc-kit download
# 应用环境到当前 shell (PowerShell)
## 功能特性
- **下载 MSVC 编译器** - 从微软服务器下载
- **下载 Windows SDK** - 到指定目录
- **自动配置环境** - 兼容 `cc-rs`
- **多版本多架构管理** - 支持 x64、x86、arm64、arm
- **提供库 API** - 可编程使用
- **断点续传** - 基于 redb 索引快速跳过
- **清单缓存** - 支持 ETag/Last-Modified 条件请求
- **TLS 后端** - 使用 `native-tls`(Windows schannel),避免 `rustls`/`awslc-sys` 构建问题
- **多格式解压** - 支持 VSIX、MSI、CAB
- **哈希校验** - SHA256 验证
## 安装
- **通过 Winget(推荐)**
```powershell
winget install loonghao.msvc-kit
```
- **通过 PowerShell 脚本**
```powershell
irm https://github.com/loonghao/msvc-kit/releases/latest/download/install.ps1 | iex
```
- **从 crates.io**
```bash
cargo install msvc-kit
```
- **预编译二进制文件**
```powershell
# 下载并解压到 PATH 中的目录
Invoke-WebRequest -Uri "https://github.com/loonghao/msvc-kit/releases/latest/download/msvc-kit-x86_64-pc-windows-msvc.zip" -OutFile msvc-kit.zip
Expand-Archive msvc-kit.zip -DestinationPath $env:USERPROFILE\.cargo\bin -Force
```
- **从源码**
```bash
git clone https://github.com/loonghao/msvc-kit.git
cd msvc-kit
cargo install --path .
```
## 发布的 Bundle
- 每次打 tag(或 release-please 生成的发布)时,CI 会为 `x64`、`x86`、`arm64` 架构构建并上传 `msvc-bundle-<msvc>-<sdk>-<arch>.zip` 到对应的 GitHub Release。
- Bundle 由 `msvc-kit bundle --accept-license` 创建,下载即表示你接受 [Microsoft Visual Studio License Terms](https://visualstudio.microsoft.com/license-terms/)。
## 快速开始 (CLI)
### 下载
```bash
# 下载最新版本
msvc-kit download
# 指定版本/目录/架构
# MSVC 版本可以是短格式 (14.44) 或完整格式 (14.44.34823)
msvc-kit download \
--msvc-version 14.44 \
--sdk-version 10.0.26100.0 \
--target C:\msvc-kit \
--arch x64 \
--host-arch x64
# 仅下载 MSVC(跳过 SDK)
msvc-kit download --no-sdk
# 仅下载 SDK(跳过 MSVC)
msvc-kit download --no-msvc
# 控制并行下载数(默认 4)
msvc-kit download --parallel-downloads 8
# 跳过哈希校验
msvc-kit download --no-verify
```
> **注意:** MSVC 版本可以使用短格式(如 `14.44`),会自动解析到最新构建版本;也可以使用完整格式(如 `14.44.34823`)指定特定构建。
**版本兼容性速查:**
| 最新版(推荐) | `14.44` | `10.0.26100.0` | `msvc-kit download` |
| Windows 11 开发 | `14.42`+ | `10.0.22621.0`+ | `msvc-kit download --sdk-version 10.0.22621.0` |
| 最大 Win10 兼容性 | `14.40` | `10.0.19041.0` | `msvc-kit download --msvc-version 14.40 --sdk-version 10.0.19041.0` |
详见 [版本兼容性指南](docs/guide/cli-download.md#version-compatibility-guide)。
### 配置环境
```bash
# 为当前 shell 生成脚本
# 或者 CMD
msvc-kit setup --script --shell cmd > setup.bat && setup.bat
# 生成可移植脚本(将安装根替换为 %~dp0runtime)
msvc-kit setup --script --shell cmd --portable-root "%~dp0runtime" > setup.bat
# 或者 Bash/WSL
eval "$(msvc-kit setup --script --shell bash)"
# 持久化到 Windows 注册表(需要管理员权限)
msvc-kit setup --persistent
```
### 创建可移植 Bundle
创建包含 MSVC 工具链的独立 bundle,可在任何地方使用:
```bash
# 创建 bundle(需要接受微软许可证)
msvc-kit bundle --accept-license
# 指定输出目录和架构
msvc-kit bundle --accept-license --output ./my-msvc-bundle --arch x64
# 交叉编译 bundle(x64 主机编译 ARM64 目标)
msvc-kit bundle --accept-license --host-arch x64 --arch arm64
# 同时创建 zip 压缩包
msvc-kit bundle --accept-license --zip
# 指定版本
msvc-kit bundle --accept-license --msvc-version 14.44 --sdk-version 10.0.26100.0
```
Bundle 包含:
- `msvc-kit.exe` - CLI 工具
- `VC/Tools/MSVC/{version}/` - MSVC 编译器和工具
- `Windows Kits/10/` - Windows SDK
- `setup.bat` - CMD 激活脚本
- `setup.ps1` - PowerShell 激活脚本
- `setup.sh` - Bash/WSL 激活脚本
- `README.txt` - 使用说明
使用方法:
```bash
# 解压并运行 setup 脚本
cd msvc-bundle
setup.bat # CMD
.\setup.ps1 # PowerShell
source setup.sh # Bash/WSL
# 现在 cl, link, nmake 可用了
cl /nologo test.c
```
### 查看版本
```bash
msvc-kit list # 显示已安装版本
msvc-kit list --available # 显示微软可用版本
```
### 清理
```bash
msvc-kit clean --msvc-version 14.44 # 删除指定 MSVC 版本
msvc-kit clean --sdk-version 10.0.26100.0 # 删除指定 SDK 版本
msvc-kit clean --all # 删除所有已安装版本
msvc-kit clean --all --cache # 同时清理下载缓存
```
### 配置
配置文件位置:`%LOCALAPPDATA%\loonghao\msvc-kit\config\config.toml`
```bash
msvc-kit config # 显示当前配置
msvc-kit config --set-dir C:\msvc-kit # 设置安装目录
msvc-kit config --set-msvc 14.44 # 设置默认 MSVC 版本
msvc-kit config --set-sdk 10.0.26100.0 # 设置默认 SDK 版本
msvc-kit config --reset # 重置为默认值
```
### 打印环境变量
```bash
msvc-kit env # 输出为 shell 脚本
msvc-kit env --format json # 输出为 JSON
```
## 缓存机制
| 下载索引 | `downloads/{msvc\|sdk}/.../index.db` | redb 数据库,跟踪下载状态 |
| 清单缓存 | `cache/manifests/` | VS 清单缓存,支持 ETag/Last-Modified |
| 解压标记 | `.msvc-kit-extracted/` | 跳过已解压的包 |
- **进度显示**:默认单行转圈。设置 `MSVC_KIT_INNER_PROGRESS=1` 显示详细文件进度。
- **跳过逻辑**:以下情况会跳过下载:
- `cached`:索引中存在且哈希匹配
- `304`:服务器返回未修改(ETag/Last-Modified 匹配)
- `size match`:文件大小匹配(尽力而为,代码中有注释说明)
## 库用法
```toml
[dependencies]
msvc-kit = "0.1"
```
```rust
use msvc_kit::{download_msvc, download_sdk, setup_environment, DownloadOptions};
use msvc_kit::{list_available_versions, Architecture};
#[tokio::main]
async fn main() -> msvc_kit::Result<()> {
// 列出微软可用版本
let versions = list_available_versions().await?;
println!("最新 MSVC: {:?}", versions.latest_msvc);
println!("最新 SDK: {:?}", versions.latest_sdk);
// 使用 Builder 模式下载
let options = DownloadOptions::builder()
.target_dir("C:/msvc-kit")
.arch(Architecture::X64)
.build();
let msvc = download_msvc(&options).await?;
let sdk = download_sdk(&options).await?;
let env = setup_environment(&msvc, Some(&sdk))?;
println!("cl.exe: {:?}", env.cl_exe_path());
Ok(())
}
```
详见 [库 API 文档](docs/api/library.md)。
## 架构支持
| `x64` | ✓ | ✓ | 64 位 x86 |
| `x86` | ✓ | ✓ | 32 位 x86 |
| `arm64` | ✓ | ✓ | ARM64 |
| `arm` | - | ✓ | ARM 32 位(仅目标) |
## 许可证
MIT 许可证 - 参见 `LICENSE`。
**重要:微软软件许可声明**
本工具下载的 MSVC 编译器和 Windows SDK 是微软的财产,
受 [Microsoft Visual Studio 许可条款](https://visualstudio.microsoft.com/license-terms/) 约束。
- **msvc-kit** 本身采用 MIT 许可证
- MSVC Build Tools 和 Windows SDK **不可再分发** - 用户必须直接下载
- 使用 `msvc-kit download` 或 `msvc-kit bundle --accept-license` 即表示您同意微软的许可条款
- 本工具仅自动化下载过程,不分发微软软件
**重要:微软软件许可声明**
本工具下载的 MSVC 编译器和 Windows SDK 是微软的财产,
受 [Microsoft Visual Studio 许可条款](https://visualstudio.microsoft.com/license-terms/) 约束。
- **msvc-kit** 本身采用 MIT 许可证
- MSVC Build Tools 和 Windows SDK **不可再分发** - 用户必须自行下载
- 使用 `msvc-kit download` 或 `msvc-kit bundle --accept-license` 即表示您同意微软的许可条款
- 本工具仅自动化下载过程,不分发微软软件