thecybercore-msbuild

TotalClaw 作者 totalclaw

.NET / ASP.NET 最常用的 80 条 MSBuild 命令模板,覆盖 restore、build、test、publish、pack 与 CI 诊断的完整 CLI 工作流。

安装 / 下载方式

TotalClaw CLI推荐
totalclaw install totalclaw:totalclaw~thecybercore-msbuild
cURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/totalclaw%3Atotalclaw~thecybercore-msbuild/file -o thecybercore-msbuild.md
## 概述(中文)

.NET / ASP.NET 最常用的 80 条 MSBuild 命令模板,覆盖 restore、build、test、publish、pack 与 CI 诊断的完整 CLI 工作流。

## 技能正文

# 技能:.NET / ASP.NET 最常用的 80 条 MSBuild 命令(CLI)

## 用途
本技能提供一套实用的、**按优先级排序**的 **80 条最有用命令模板**,用于在命令行通过 **MSBuild**(`dotnet msbuild` 或 `msbuild`)处理 .NET / ASP.NET 项目。流程贴近日常:restore → build → test → publish/pack → diagnose → CI 加固。

## 典型 ASP.NET 开发者工作流(命令优先级依据)
典型 ASP.NET CLI 工作流:
1. **Restore** 依赖(CI 中常用锁定模式)
2. **Build** 快速(Debug)且可靠(Release)
3. **Test** 反复运行(过滤器、日志、结果目录、CI 中 no-build/no-restore)
4. **Publish** 产物(RID、自包含、单文件、裁剪、ready-to-run)
5. **Package** 库(Pack)、版本管理
6. **Diagnose** 构建问题(binlog、verbosity、preprocess、graph build)
7. **CI 加固**(确定性、CI 标志、node reuse、并行、可复现性)

排序反映该流程中的频率与影响。

## 约定
- 优先跨平台:`dotnet msbuild`
- Windows 上若已安装 VS Build Tools 可改用:`msbuild`
- 目标:`/t:<Target>`
- 属性:`/p:Name=Value`
- 日志:`/v:<level>`、`/bl[:file]`、`/fl`、`/pp`
- 多进程:`/m[:n]`
- 说明:`dotnet test` 因是实用测试 CLI(底层调用 MSBuild)而包含在内。

---

## 前 80 条命令(1 = 最重要)

> 按需替换 `MySolution.sln` / `src/MyWeb/MyWeb.csproj` / `tests/...`。

### A) Restore / Build / Clean / Rebuild(日常)
1) 还原解决方案
```bash
dotnet msbuild MySolution.sln /t:Restore
```

2) 构建解决方案(Debug)

```bash
dotnet msbuild MySolution.sln /t:Build /p:Configuration=Debug
```

3) 构建解决方案(Release)

```bash
dotnet msbuild MySolution.sln /t:Build /p:Configuration=Release
```

4) 清理解决方案

```bash
dotnet msbuild MySolution.sln /t:Clean /p:Configuration=Debug
```

5) 重新构建解决方案(Clean + Build)

```bash
dotnet msbuild MySolution.sln /t:Rebuild /p:Configuration=Release
```

6) 一次调用 Restore + Build

```bash
dotnet msbuild MySolution.sln /restore /t:Build /p:Configuration=Debug
```

7) 不还原直接构建(CI 友好)

```bash
dotnet msbuild MySolution.sln /t:Build /p:Configuration=Release /p:Restore=false
```

8) 并行构建(最大 CPU)

```bash
dotnet msbuild MySolution.sln /t:Build /m /p:Configuration=Release
```

9) 较安静的 CI 输出

```bash
dotnet msbuild MySolution.sln /t:Build /nologo /v:minimal /p:Configuration=Release
```

10) 构建单个项目

```bash
dotnet msbuild src/MyWeb/MyWeb.csproj /t:Build /p:Configuration=Debug
```

11) 显式设置 Platform

```bash
dotnet msbuild MySolution.sln /t:Build /p:Configuration=Release /p:Platform="Any CPU"
```

12) 将警告视为错误

```bash
dotnet msbuild MySolution.sln /t:Build /p:Configuration=Release /p:TreatWarningsAsErrors=true
```

13) 确定性构建

```bash
dotnet msbuild MySolution.sln /t:Build /p:Configuration=Release /p:Deterministic=true
```

14) CI 构建模式(SourceLink/版本行为)

```bash
dotnet msbuild MySolution.sln /t:Build /p:Configuration=Release /p:ContinuousIntegrationBuild=true
```

15) 禁用增量 up-to-date 检查(强制构建行为)

```bash
dotnet msbuild MySolution.sln /t:Build /p:Configuration=Release /p:DisableFastUpToDateCheck=true
```

16) 带预定义常量构建

```bash
dotnet msbuild src/MyWeb/MyWeb.csproj /t:Build /p:Configuration=Debug /p:DefineConstants="TRACE;DEBUG;MYFLAG"
```

17) 设置 OutputPath(临时产物)

```bash
dotnet msbuild src/MyWeb/MyWeb.csproj /t:Build /p:Configuration=Release /p:OutputPath=artifacts/bin/
```

18) 设置 BaseIntermediateOutputPath(obj 隔离 / CI 缓存)

```bash
dotnet msbuild src/MyWeb/MyWeb.csproj /t:Build /p:Configuration=Release /p:BaseIntermediateOutputPath=artifacts/obj/
```

19) 禁用共享编译(调试异常构建行为)

```bash
dotnet msbuild MySolution.sln /t:Build /p:Configuration=Debug /p:UseSharedCompilation=false
```

20) 显示 MSBuild 版本

```bash
dotnet msbuild -version
```

### B) 测试(实用 CLI;基于 MSBuild)

21) 运行测试(解决方案)

```bash
dotnet test MySolution.sln -c Release
```

22) 不构建直接测试

```bash
dotnet test MySolution.sln -c Release --no-build
```

23) 不还原直接测试

```bash
dotnet test MySolution.sln -c Release --no-restore
```

24) 测试单个测试项目

```bash
dotnet test tests/MyWeb.Tests/MyWeb.Tests.csproj -c Debug
```

25) 按完全限定名过滤测试

```bash
dotnet test MySolution.sln -c Release --filter "FullyQualifiedName~MyNamespace"
```

26) 按 trait/类别过滤测试(示例)

```bash
dotnet test MySolution.sln -c Release --filter "TestCategory=Integration"
```

27) TRX 日志记录器

```bash
dotnet test MySolution.sln -c Release --logger "trx"
```

28) 结果目录

```bash
dotnet test MySolution.sln -c Release --results-directory artifacts/testresults
```

29) 收集覆盖率(跨平台收集器)

```bash
dotnet test MySolution.sln -c Release --collect "XPlat Code Coverage"
```

30) 提高测试详细级别

```bash
dotnet test MySolution.sln -c Release -v normal
```

31) Blame/挂起诊断

```bash
dotnet test MySolution.sln -c Release --blame
```

32) 按名称运行特定测试

```bash
dotnet test MySolution.sln -c Release --filter "Name=MySpecificTest"
```

### C) 发布(ASP.NET 核心场景)

33) 发布(Release,框架依赖)

```bash
dotnet msbuild src/MyWeb/MyWeb.csproj /t:Publish /p:Configuration=Release
```

34) 发布到指定目录

```bash
dotnet msbuild src/MyWeb/MyWeb.csproj /t:Publish /p:Configuration=Release /p:PublishDir=artifacts/publish/
```

35) 带 RuntimeIdentifier (RID) 发布

```bash
dotnet msbuild src/MyWeb/MyWeb.csproj /t:Publish /p:Configuration=Release /p:RuntimeIdentifier=linux-x64
```

36) 自包含发布

```bash
dotnet msbuild src/MyWeb/MyWeb.csproj /t:Publish /p:Configuration=Release /p:RuntimeIdentifier=linux-x64 /p:SelfContained=true
```

37) 框架依赖(显式)

```bash
dotnet msbuild src/MyWeb/MyWeb.csproj /t:Publish /p:Configuration=Release /p:SelfContained=false
```

38) 单文件发布

```bash
dotnet msbuild src/MyWeb/MyWeb.csproj /t:Publish /p:Configuration=Release /p:RuntimeIdentifier=win-x64 /p:PublishSingleFile=true
```

39) ReadyToRun 发布

```bash
dotnet msbuild src/MyWeb/MyWeb.csproj /t:Publish /p:Configuration=Release /p:PublishReadyToRun=true
```

40) 裁剪发布(谨慎使用)

```bash
dotnet msbuild src/MyWeb/MyWeb.csproj /t:Publish /p:Configuration=Release /p:PublishTrimmed=true
```

41) 单文件 + 裁剪(高级)

```bash
dotnet msbuild src/MyWeb/MyWeb.csproj /t:Publish /p:Configuration=Release /p:RuntimeIdentifier=linux-x64 /p:PublishSingleFile=true /p:PublishTrimmed=true
```

42) 标记环境属性(模式;应用须使用)

```bash
dotnet msbuild src/MyWeb/MyWeb.csproj /t:Publish /p:Configuration=Release /p:EnvironmentName=Production
```

43) 带版本标记发布

```bash
dotnet msbuild src/MyWeb/MyWeb.csproj /t:Publish /p:Configuration=Release /p:Version=1.2.3
```

44) 显式 TargetFramework 发布(多 TFM 项目)

```bash
dotnet msbuild src/MyWeb/MyWeb.csproj /t:Publish /p:Configuration=Release /p:TargetFramework=net8.0
```

45) 带 CI 属性发布

```bash
dotnet msbuild src/MyWeb/MyWeb.csproj /t:Publish /p:Configuration=Release /p:ContinuousIntegrationBuild=true /p:Deterministic=true
```

46) 发布:RID + 自包含 + 输出

```bash
dotnet msbuild src/MyWeb/MyWeb.csproj /t:Publish /p:Configuration=Release /p:RuntimeIdentifier=linux-x64 /p:SelfContained=true /p:PublishDir=artifacts/publish/linux-x64/
```

### D) Pack / NuGet / 版本管理

47) 打包库

```bash
dotnet msbuild src/MyLib/MyLib.csproj /t:Pack /p:Configuration=Release
```

48) 打包到自定义输出路径

```bash
dotnet msbuild src/MyLib/MyLib.csproj /t:Pack /p:Configuration=Release /p:PackageOutputPath=artifacts/nuget/
```

49) 带版本打包

```bash
dotnet msbuild src/MyLib/MyLib.csproj /t:Pack /p:Configuration=Release /p:Version=1.2.3
```

50) 设置 AssemblyVersion / FileVersion

```bash
dotnet msbuild src/MyLib/MyLib.csproj /t:Build /p:Configuration=Release /p:AssemblyVersion=1.2.0.0 /p:FileVersion=1.2.3.0
```

51) InformationalVersion(提交元数据)

```bash
dotnet msbuild src/MyLib/MyLib.csproj /t:Build /p:Configuration=Release /p:InformationalVersion=1.2.3+sha.abcdef
```

52) 还原并生成 packages.lock.json

```bash
dotnet msbuild MySolution.sln /t:Restore /p:RestorePackagesWithLockFile=true
```

53) 锁定模式还原(锁文件变更则失败)

```bash
dotnet msbuild MySolution.sln /t:Restore /p:RestoreLockedMode=true
```

54) 使用自定义 NuGet.config 还原

```bash
dotnet msbuild MySolution.sln /t:Restore /p:RestoreConfigFile=NuGet.config
```

55) 自定义 packages 文件夹还原(CI 缓存)

```bash
dotnet msbuild MySolution.sln /t:Restore /p:RestorePackagesPath=artifacts/nuget-packages
```

### E) 诊断 / 故障排除

56) 二进制日志 (binlog) — 首选步骤

```bash
dotnet msbuild MySolution.sln /t:Build /p:Configuration=Release /bl
```

57) 指定路径的 binlog

```bash
dotnet msbuild MySolution.sln /t:Build /p:Configuration=Release /bl:artifacts/logs/build.binlog
```

58) 详细级别:detailed

```bash
dotnet msbuild MySolution.sln /t:Build /v:detailed
```

59) 详细级别:diagnostic(仅在需要