.NET CLI 备忘清单

这份快速参考备忘单整理了 .NET 命令行接口的项目创建、还原、构建、运行、测试、发布、包管理、工具、工作负荷和诊断命令

入门

介绍

.NET CLI 是随 .NET SDK 提供的跨平台工具链,用于开发、构建、运行、测试和发布 .NET 应用。

$ dotnet --info
$ dotnet --version
$ dotnet --list-sdks
$ dotnet --list-runtimes

dotnet 既可以运行 .NET 应用,也可以执行项目相关命令。所有命令都支持 --help 查看简要帮助。

命令结构

$ dotnet <command> [arguments] [options]
$ dotnet build --configuration Release
$ dotnet run --project src/MyApp
$ dotnet MyApp.dll

常见短选项包括 -c|--configuration、-f|--framework、-o|--output、-r|--runtime。

常用流程

$ dotnet new console -n HelloCli
$ cd HelloCli
$ dotnet restore
$ dotnet build
$ dotnet run
$ dotnet test
$ dotnet publish -c Release -o ./publish

多数命令会按需触发还原。CI 或离线场景中可显式使用 dotnet restore 并在后续命令中配合 --no-restore。

项目命令

基础命令

命令说明示例
new基于模板创建项目或文件dotnet new webapi -n Api
restore还原项目依赖dotnet restore
build构建项目、解决方案或文件应用dotnet build -c Release
run从源码构建并运行项目dotnet run --project src/App
test运行测试项目dotnet test --logger trx
publish生成可部署输出dotnet publish -c Release -o ./publish
pack创建 NuGet 包dotnet pack -c Release
clean清理构建输出dotnet clean
sln管理解决方案文件dotnet sln add src/App/App.csproj
format格式化代码dotnet format
watch监听文件变化并执行命令dotnet watch run
vstest运行已编译测试程序集dotnet vstest tests.dll

dotnet run 适合开发迭代,不推荐作为生产运行方式。部署时应使用 dotnet publish 输出。

创建项目

$ dotnet new list
$ dotnet new console -n HelloCli
$ dotnet new webapi -n Api
$ dotnet new classlib -n Core
$ dotnet new gitignore

dotnet new 使用模板引擎创建项目或其他文件。可通过 dotnet new search <关键字> 查找模板。

构建

$ dotnet build
$ dotnet build MyApp.sln -c Release
$ dotnet build src/App/App.csproj -f net8.0
$ dotnet build --no-restore

dotnet build 使用 MSBuild 构建项目并支持 MSBuild 属性,例如 -p:Version=1.2.3。

发布

$ dotnet publish -c Release -o ./publish
$ dotnet publish -c Release -r win-x64 --self-contained true
$ dotnet publish -c Release -r linux-x64 --self-contained false

dotnet publish 会编译应用、读取依赖并生成可部署输出,是官方支持的部署准备方式。

$ dotnet publish -c Release -p:PublishSingleFile=true
$ dotnet publish -c Release -p:PublishTrimmed=true
$ dotnet publish -c Release -p:PublishReadyToRun=true

单文件、裁剪和 ReadyToRun 等选项会影响输出大小、启动速度和兼容性,发布前应在目标环境测试。

运行

$ dotnet run
$ dotnet run --project src/App
$ dotnet run --configuration Release -- arg1 arg2
$ dotnet run --no-build

应用参数放在 -- 后面,避免与 dotnet run 自身选项混淆。

测试

$ dotnet test
$ dotnet test -c Release
$ dotnet test --filter FullyQualifiedName~Unit
$ dotnet test --collect "XPlat Code Coverage"

dotnet test 会运行测试项目,并把参数传递给测试平台。

包与引用

NuGet 包引用

命令说明示例
dotnet add package.NET 9 及更早版本添加包dotnet add package Newtonsoft.Json
dotnet package add.NET 10 起添加或更新包dotnet package add Newtonsoft.Json
dotnet list package.NET 9 及更早版本列出包dotnet list package
dotnet package list.NET 10 起列出包dotnet package list
dotnet remove package移除包引用dotnet remove package Newtonsoft.Json
dotnet package search搜索 NuGet 包dotnet package search Newtonsoft.Json

.NET 10 引入了更一致的“名词优先”命令顺序。维护旧项目时仍常见 dotnet add package 和 dotnet list package。

包版本与源

$ dotnet add package Serilog --version 4.0.0
$ dotnet package add Serilog --version 4.0.0
$ dotnet restore --source https://api.nuget.org/v3/index.json

添加包时 CLI 会检查包与项目目标框架的兼容性,并把 PackageReference 写入项目文件。

项目引用

$ dotnet add app/app.csproj reference lib/lib.csproj
$ dotnet reference add lib/lib.csproj --project app/app.csproj
$ dotnet list reference
$ dotnet reference list --project app/app.csproj
$ dotnet remove reference lib/lib.csproj

项目引用会在 .csproj 中生成 ProjectReference。CLI 不提供添加任意程序集引用的命令,需手动编辑项目文件。

NuGet 源

命令说明示例
nuget list source列出源dotnet nuget list source
nuget add source添加源dotnet nuget add source <url> -n Private
nuget update source更新源dotnet nuget update source Private -s <url>
nuget enable source启用源dotnet nuget enable source Private
nuget disable source禁用源dotnet nuget disable source Private
nuget remove source移除源dotnet nuget remove source Private
nuget locals查看或清理缓存dotnet nuget locals all --clear

包发布与签名

$ dotnet pack -c Release
$ dotnet nuget push bin/Release/MyLib.1.0.0.nupkg -k API_KEY -s https://api.nuget.org/v3/index.json
$ dotnet nuget delete MyLib 1.0.0 -s https://api.nuget.org/v3/index.json -k API_KEY
$ dotnet nuget verify MyLib.1.0.0.nupkg
$ dotnet nuget sign MyLib.1.0.0.nupkg --certificate-path cert.pfx

发布到 nuget.org 时建议使用 scoped API key,并避免把密钥写入仓库。

解决方案与工具

解决方案

$ dotnet new sln -n MySolution
$ dotnet sln add src/App/App.csproj
$ dotnet sln add tests/App.Tests/App.Tests.csproj
$ dotnet sln list
$ dotnet sln remove tests/App.Tests/App.Tests.csproj

解决方案文件用于组织多个项目,方便统一构建和测试。

.NET 工具

命令说明示例
tool install -g安装全局工具dotnet tool install -g dotnet-ef
tool install --local安装本地工具dotnet tool install --local dotnet-ef
tool list列出工具dotnet tool list -g
tool update更新工具dotnet tool update -g dotnet-ef
tool restore还原本地工具dotnet tool restore
tool run运行本地工具dotnet tool run dotnet-ef
tool uninstall卸载工具dotnet tool uninstall -g dotnet-ef
tool search搜索工具dotnet tool search format

本地工具依赖 .config/dotnet-tools.json manifest,适合团队项目固定工具版本。

工作负荷

$ dotnet workload list
$ dotnet workload search maui
$ dotnet workload install maui
$ dotnet workload update
$ dotnet workload restore
$ dotnet workload repair
$ dotnet workload uninstall maui

工作负荷用于安装 MAUI、Android、iOS、WebAssembly 等 SDK 扩展。

诊断与高级

SDK 与运行时

$ dotnet --info
$ dotnet --list-sdks
$ dotnet --list-runtimes
$ dotnet sdk check

dotnet sdk check 会显示已安装 SDK/运行时以及可用更新。

MSBuild

$ dotnet msbuild
$ dotnet msbuild /t:Clean,Build /p:Configuration=Release
$ dotnet build -p:TreatWarningsAsErrors=true

dotnet build 内部使用 MSBuild;需要更细粒度控制时可直接使用 dotnet msbuild。

构建服务器

$ dotnet build-server list
$ dotnet build-server shutdown

构建服务器缓存可能影响诊断结果。遇到奇怪的构建缓存问题时,可以先关闭构建服务器后重试。

安装脚本

$ curl -sSL https://dot.net/v1/dotnet-install.sh | bash
$ powershell -ExecutionPolicy Bypass -File dotnet-install.ps1 -Channel 8.0

安装脚本适合 CI 或用户级安装。生产机器更推荐使用系统包管理器或官方安装程序。

开发证书

$ dotnet dev-certs https --check
$ dotnet dev-certs https --trust
$ dotnet dev-certs https --clean

HTTPS 开发证书常用于 ASP.NET Core 本地开发。

常见场景

CI 构建

$ dotnet restore
$ dotnet build --no-restore -c Release
$ dotnet test --no-build -c Release
$ dotnet publish --no-build -c Release -o ./publish

把还原、构建、测试和发布拆开,能减少重复工作并让失败位置更清晰。

多目标框架

$ dotnet build -f net8.0
$ dotnet test -f net8.0

当项目配置多个目标框架时,可用 -f|--framework 指定要构建或测试的目标框架。

指定运行时

$ dotnet publish -r win-x64
$ dotnet publish -r linux-arm64 --self-contained true

-r|--runtime 使用 Runtime Identifier。自包含发布会把 .NET 运行时一起带上。