Skip to main content

.NET CLI 命令行完全指南

📚 目录

  1. 基础命令
  2. 项目管理
  3. 解决方案管理
  4. 包管理
  5. 构建和运行
  6. 测试相关
  7. 发布和部署
  8. 工具管理
  9. 完整项目创建流程
  10. 常见场景示例

基础命令

dotnet --version

查看当前安装的 .NET SDK 版本

dotnet --version
# 输出示例: 8.0.100

dotnet --info

显示详细的 .NET 信息(SDK、运行时版本等)

dotnet --info

dotnet --list-sdks

列出所有已安装的 SDK

dotnet --list-sdks
# 输出示例:
# 6.0.400 [C:\Program Files\dotnet\sdk]
# 7.0.100 [C:\Program Files\dotnet\sdk]
# 8.0.100 [C:\Program Files\dotnet\sdk]

dotnet --list-runtimes

列出所有已安装的运行时

dotnet --list-runtimes

dotnet -h 或 --help

显示帮助信息

dotnet --help
dotnet new --help
dotnet build --help

项目管理

dotnet new

创建新项目或文件

基本语法

dotnet new <模板名称> [选项]

常用项目模板

# 控制台应用
dotnet new console -n MyConsoleApp

# 类库
dotnet new classlib -n MyLibrary

# ASP.NET Core Web API
dotnet new webapi -n MyWebApi

# ASP.NET Core MVC
dotnet new mvc -n MyMvcApp

# ASP.NET Core Razor Pages
dotnet new razor -n MyRazorApp

# Blazor Server
dotnet new blazorserver -n MyBlazorApp

# Blazor WebAssembly
dotnet new blazorwasm -n MyBlazorWasm

# WPF 应用
dotnet new wpf -n MyWpfApp

# WinForms 应用
dotnet new winforms -n MyWinFormsApp

# xUnit 测试项目
dotnet new xunit -n MyTests

# NUnit 测试项目
dotnet new nunit -n MyTests

# MSTest 测试项目
dotnet new mstest -n MyTests

# Worker Service
dotnet new worker -n MyWorkerService

# gRPC 服务
dotnet new grpc -n MyGrpcService

常用选项

# -n, --name: 指定项目名称
dotnet new console -n MyApp

# -o, --output: 指定输出目录
dotnet new console -o ./src/MyApp

# -f, --framework: 指定目标框架
dotnet new console -f net8.0
dotnet new console -f net6.0

# --use-program-main: 使用传统的 Program.cs 格式(而不是顶级语句)
dotnet new console --use-program-main

# --force: 强制创建(即使目录已存在)
dotnet new console -n MyApp --force

# --language: 指定编程语言
dotnet new console -lang C#
dotnet new console -lang F#
dotnet new console -lang VB

dotnet new list

列出所有可用的模板

# 列出所有模板
dotnet new list

# 搜索特定模板
dotnet new list web
dotnet new list test

dotnet new install

安装模板包

# 安装模板包
dotnet new install Microsoft.DotNet.Web.Spa.ProjectTemplates

# 从 NuGet 安装
dotnet new install <包名称>

dotnet new uninstall

卸载模板包

dotnet new uninstall Microsoft.DotNet.Web.Spa.ProjectTemplates

解决方案管理

dotnet new sln

创建新的解决方案文件

# 在当前目录创建解决方案
dotnet new sln

# 指定解决方案名称
dotnet new sln -n MySolution

# 在指定目录创建
dotnet new sln -o ./src -n MySolution

dotnet sln add

向解决方案添加项目

# 添加单个项目
dotnet sln add MyProject/MyProject.csproj

# 添加多个项目
dotnet sln add Project1/Project1.csproj Project2/Project2.csproj

# 添加目录下所有项目
dotnet sln add **/*.csproj

# 在特定解决方案文件夹中添加项目
dotnet sln add MyProject/MyProject.csproj --solution-folder src

dotnet sln remove

从解决方案移除项目

# 移除单个项目
dotnet sln remove MyProject/MyProject.csproj

# 移除多个项目
dotnet sln remove Project1/Project1.csproj Project2/Project2.csproj

dotnet sln list

列出解决方案中的所有项目

dotnet sln list

# 指定解决方案文件
dotnet sln MySolution.sln list

包管理

dotnet add package

添加 NuGet 包引用

# 添加最新版本的包
dotnet add package Newtonsoft.Json

# 添加特定版本
dotnet add package Newtonsoft.Json --version 13.0.1

# 添加预览版本
dotnet add package Microsoft.EntityFrameworkCore --prerelease

# 指定项目文件
dotnet add MyProject/MyProject.csproj package Newtonsoft.Json

# 指定包源
dotnet add package MyPackage --source https://api.nuget.org/v3/index.json

dotnet remove package

移除 NuGet 包引用

# 移除包
dotnet remove package Newtonsoft.Json

# 从特定项目移除
dotnet remove MyProject/MyProject.csproj package Newtonsoft.Json

dotnet list package

列出项目的包引用

# 列出当前项目的包
dotnet list package

# 列出所有项目的包(在解决方案级别)
dotnet list package

# 显示过时的包
dotnet list package --outdated

# 显示有安全漏洞的包
dotnet list package --vulnerable

# 显示已弃用的包
dotnet list package --deprecated

# 包括传递依赖
dotnet list package --include-transitive

dotnet add reference

添加项目引用

# 添加项目引用
dotnet add reference ../MyLibrary/MyLibrary.csproj

# 添加多个引用
dotnet add reference ../Lib1/Lib1.csproj ../Lib2/Lib2.csproj

# 指定引用的项目
dotnet add MyProject/MyProject.csproj reference ../MyLibrary/MyLibrary.csproj

dotnet remove reference

移除项目引用

# 移除引用
dotnet remove reference ../MyLibrary/MyLibrary.csproj

dotnet list reference

列出项目引用

# 列出当前项目的引用
dotnet list reference

# 列出特定项目的引用
dotnet list MyProject/MyProject.csproj reference

构建和运行

dotnet restore

恢复项目依赖

# 恢复当前项目
dotnet restore

# 恢复特定项目
dotnet restore MyProject/MyProject.csproj

# 恢复整个解决方案
dotnet restore MySolution.sln

# 指定包源
dotnet restore --source https://api.nuget.org/v3/index.json

# 强制重新评估所有依赖
dotnet restore --force

# 不使用缓存
dotnet restore --no-cache

dotnet build

编译项目

# 编译当前项目
dotnet build

# 编译特定项目
dotnet build MyProject/MyProject.csproj

# 编译解决方案
dotnet build MySolution.sln

# 指定配置(Debug/Release)
dotnet build -c Release
dotnet build --configuration Debug

# 指定输出目录
dotnet build -o ./build

# 不进行 restore
dotnet build --no-restore

# 详细输出
dotnet build -v detailed
dotnet build --verbosity normal

# 指定目标框架
dotnet build -f net8.0

dotnet run

运行项目

# 运行当前项目
dotnet run

# 运行特定项目
dotnet run --project MyProject/MyProject.csproj

# 传递参数给程序
dotnet run -- arg1 arg2

# 指定配置
dotnet run -c Release

# 不进行 build
dotnet run --no-build

# 指定框架
dotnet run -f net8.0

# 指定启动 URL(对于 web 应用)
dotnet run --urls "http://localhost:5000"

dotnet clean

清理构建输出

# 清理当前项目
dotnet clean

# 清理特定配置
dotnet clean -c Release

# 清理特定项目
dotnet clean MyProject/MyProject.csproj

dotnet watch

监视文件更改并自动重新构建/运行

# 监视并运行
dotnet watch run

# 监视并运行测试
dotnet watch test

# 监视特定项目
dotnet watch --project MyProject/MyProject.csproj run

测试相关

dotnet test

运行测试

# 运行所有测试
dotnet test

# 运行特定项目的测试
dotnet test MyTests/MyTests.csproj

# 运行解决方案中所有测试
dotnet test MySolution.sln

# 指定配置
dotnet test -c Release

# 不进行 build
dotnet test --no-build

# 筛选测试
dotnet test --filter "FullyQualifiedName~MyNamespace"
dotnet test --filter "Category=Unit"

# 生成代码覆盖率
dotnet test --collect:"XPlat Code Coverage"

# 详细输出
dotnet test -v detailed

# 并行运行测试
dotnet test --parallel

发布和部署

dotnet publish

发布应用程序

# 发布当前项目
dotnet publish

# 指定输出目录
dotnet publish -o ./publish

# 指定配置
dotnet publish -c Release

# 指定运行时标识符(RID)
dotnet publish -r win-x64
dotnet publish -r linux-x64
dotnet publish -r osx-x64

# 自包含发布(包含运行时)
dotnet publish -r win-x64 --self-contained

# 框架依赖发布
dotnet publish -r win-x64 --self-contained false

# 单文件发布
dotnet publish -r win-x64 -p:PublishSingleFile=true

# 启用 ReadyToRun 编译
dotnet publish -c Release -p:PublishReadyToRun=true

# 启用裁剪(减小输出大小)
dotnet publish -c Release -p:PublishTrimmed=true

# 发布 Web 应用
dotnet publish -c Release -o ./publish --no-restore

常见运行时标识符(RID)

# Windows
win-x64 # Windows 64位
win-x86 # Windows 32位
win-arm64 # Windows ARM64

# Linux
linux-x64 # Linux 64位
linux-arm64 # Linux ARM64
linux-musl-x64 # Alpine Linux

# macOS
osx-x64 # macOS Intel
osx-arm64 # macOS Apple Silicon (M1/M2)

工具管理

dotnet tool install

安装 .NET 工具

# 全局安装工具
dotnet tool install -g dotnet-ef

# 本地安装工具(在项目中)
dotnet tool install dotnet-ef

# 安装特定版本
dotnet tool install -g dotnet-ef --version 7.0.0

# 从特定源安装
dotnet tool install -g MyTool --add-source https://api.nuget.org/v3/index.json

dotnet tool update

更新工具

# 更新全局工具
dotnet tool update -g dotnet-ef

# 更新本地工具
dotnet tool update dotnet-ef

dotnet tool uninstall

卸载工具

# 卸载全局工具
dotnet tool uninstall -g dotnet-ef

# 卸载本地工具
dotnet tool uninstall dotnet-ef

dotnet tool list

列出已安装的工具

# 列出全局工具
dotnet tool list -g

# 列出本地工具
dotnet tool list

常用的 .NET 工具

# Entity Framework Core 工具
dotnet tool install -g dotnet-ef

# ASP.NET Core 代码生成器
dotnet tool install -g dotnet-aspnet-codegenerator

# 用户密钥管理
dotnet tool install -g dotnet-user-secrets

# 开发证书
dotnet tool install -g dotnet-dev-certs

# SQL Server 缓存工具
dotnet tool install -g dotnet-sql-cache

完整项目创建流程

示例1:创建简单的控制台应用项目结构

# 1. 创建项目目录
mkdir MyConsoleApp
cd MyConsoleApp

# 2. 创建解决方案
dotnet new sln -n MyConsoleApp

# 3. 创建主项目
dotnet new console -n MyConsoleApp.Core

# 4. 创建类库
dotnet new classlib -n MyConsoleApp.Data

# 5. 创建测试项目
dotnet new xunit -n MyConsoleApp.Tests

# 6. 添加项目到解决方案
dotnet sln add MyConsoleApp.Core/MyConsoleApp.Core.csproj
dotnet sln add MyConsoleApp.Data/MyConsoleApp.Data.csproj
dotnet sln add MyConsoleApp.Tests/MyConsoleApp.Tests.csproj

# 7. 添加项目引用
cd MyConsoleApp.Core
dotnet add reference ../MyConsoleApp.Data/MyConsoleApp.Data.csproj
cd ..

cd MyConsoleApp.Tests
dotnet add reference ../MyConsoleApp.Core/MyConsoleApp.Core.csproj
cd ..

# 8. 添加 NuGet 包
cd MyConsoleApp.Data
dotnet add package Newtonsoft.Json
cd ..

cd MyConsoleApp.Tests
dotnet add package FluentAssertions
cd ..

# 9. 恢复并构建
dotnet restore
dotnet build

# 10. 运行
cd MyConsoleApp.Core
dotnet run

示例2:创建 Web API 项目结构

# 1. 创建根目录
mkdir MyWebApi
cd MyWebApi

# 2. 创建解决方案
dotnet new sln -n MyWebApi

# 3. 创建 src 目录
mkdir src
cd src

# 4. 创建 Web API 项目
dotnet new webapi -n MyWebApi.Api

# 5. 创建数据访问层
dotnet new classlib -n MyWebApi.Data

# 6. 创建业务逻辑层
dotnet new classlib -n MyWebApi.Services

# 7. 创建领域模型层
dotnet new classlib -n MyWebApi.Models

cd ..

# 8. 创建 tests 目录
mkdir tests
cd tests

# 9. 创建测试项目
dotnet new xunit -n MyWebApi.Api.Tests
dotnet new xunit -n MyWebApi.Services.Tests

cd ..

# 10. 添加所有项目到解决方案
dotnet sln add src/MyWebApi.Api/MyWebApi.Api.csproj
dotnet sln add src/MyWebApi.Data/MyWebApi.Data.csproj
dotnet sln add src/MyWebApi.Services/MyWebApi.Services.csproj
dotnet sln add src/MyWebApi.Models/MyWebApi.Models.csproj
dotnet sln add tests/MyWebApi.Api.Tests/MyWebApi.Api.Tests.csproj
dotnet sln add tests/MyWebApi.Services.Tests/MyWebApi.Services.Tests.csproj

# 11. 配置项目引用
cd src/MyWebApi.Data
dotnet add reference ../MyWebApi.Models/MyWebApi.Models.csproj
cd ../..

cd src/MyWebApi.Services
dotnet add reference ../MyWebApi.Data/MyWebApi.Data.csproj
dotnet add reference ../MyWebApi.Models/MyWebApi.Models.csproj
cd ../..

cd src/MyWebApi.Api
dotnet add reference ../MyWebApi.Services/MyWebApi.Services.csproj
dotnet add reference ../MyWebApi.Models/MyWebApi.Models.csproj
cd ../..

# 12. 添加 NuGet 包
cd src/MyWebApi.Data
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
cd ../..

cd src/MyWebApi.Api
dotnet add package Swashbuckle.AspNetCore
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
cd ../..

# 13. 构建解决方案
dotnet build

# 14. 运行 API
cd src/MyWebApi.Api
dotnet run

示例3:创建聊天系统(来自你的示例)

# 1. 创建根目录
mkdir NetworkerChatDemo
cd NetworkerChatDemo

# 2. 创建解决方案
dotnet new sln -n NetworkerChatDemo

# 3. 创建共享库
dotnet new classlib -n ChatSystem.Common

# 4. 创建服务器
dotnet new console -n ChatSystem.Server

# 5. 创建客户端
dotnet new console -n ChatSystem.Client

# 6. 创建核心网络库
dotnet new classlib -n Networker

# 7. 创建 JSON 扩展
dotnet new classlib -n Networker.Extensions.Json

# 8. 添加到解决方案
dotnet sln add ChatSystem.Common/ChatSystem.Common.csproj
dotnet sln add ChatSystem.Server/ChatSystem.Server.csproj
dotnet sln add ChatSystem.Client/ChatSystem.Client.csproj
dotnet sln add Networker/Networker.csproj
dotnet sln add Networker.Extensions.Json/Networker.Extensions.Json.csproj

# 9. 配置 Networker 依赖
cd Networker
dotnet add package Microsoft.Extensions.DependencyInjection --version 2.2.0
dotnet add package Microsoft.Extensions.Logging --version 2.2.0
dotnet add package System.Memory --version 4.5.2
cd ..

# 10. 配置 JSON 扩展
cd Networker.Extensions.Json
dotnet add reference ../Networker/Networker.csproj
dotnet add package Newtonsoft.Json --version 12.0.3
cd ..

# 11. 配置服务器依赖
cd ChatSystem.Server
dotnet add reference ../ChatSystem.Common/ChatSystem.Common.csproj
dotnet add reference ../Networker/Networker.csproj
dotnet add reference ../Networker.Extensions.Json/Networker.Extensions.Json.csproj
dotnet add package Microsoft.Extensions.Logging.Console --version 2.2.0
cd ..

# 12. 配置客户端依赖
cd ChatSystem.Client
dotnet add reference ../ChatSystem.Common/ChatSystem.Common.csproj
dotnet add reference ../Networker/Networker.csproj
dotnet add reference ../Networker.Extensions.Json/Networker.Extensions.Json.csproj
dotnet add package Microsoft.Extensions.Logging.Console --version 2.2.0
cd ..

# 13. 恢复并构建
dotnet restore
dotnet build

# 14. 运行服务器(在一个终端)
cd ChatSystem.Server
dotnet run

# 15. 运行客户端(在另一个终端)
cd ChatSystem.Client
dotnet run

常见场景示例

场景1:克隆项目后的初始化

# 1. 克隆仓库
git clone https://github.com/username/project.git
cd project

# 2. 恢复 NuGet 包
dotnet restore

# 3. 构建项目
dotnet build

# 4. 运行测试
dotnet test

# 5. 运行项目
dotnet run --project src/MyProject/MyProject.csproj

场景2:更新所有 NuGet 包

# 1. 查看过时的包
dotnet list package --outdated

# 2. 更新包(需要手动编辑 .csproj 或使用工具)
# 或者使用 NuGet CLI
nuget update

# 3. 清理和重建
dotnet clean
dotnet restore
dotnet build

场景3:创建并运行 Docker 化的应用

# 1. 创建 Web API
dotnet new webapi -n MyDockerApp

# 2. 添加 Dockerfile(手动创建)
# FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
# ...

# 3. 发布应用
dotnet publish -c Release -o ./publish

# 4. 构建 Docker 镜像
docker build -t mydockerapp .

# 5. 运行容器
docker run -p 8080:80 mydockerapp

场景4:迁移 .NET Framework 项目到 .NET Core/6+

# 1. 使用迁移工具评估
dotnet tool install -g try-convert
try-convert -p MyOldProject.csproj

# 2. 创建新的 .NET 6+ 项目
dotnet new classlib -n MyProject -f net8.0

# 3. 复制源文件并调整

# 4. 更新 NuGet 包
dotnet list package
dotnet add package <PackageName> --version <Version>

# 5. 构建并测试
dotnet build
dotnet test

场景5:性能分析

# 1. 安装诊断工具
dotnet tool install -g dotnet-trace
dotnet tool install -g dotnet-counters
dotnet tool install -g dotnet-dump

# 2. 运行应用
dotnet run -c Release

# 3. 收集性能数据
dotnet-trace collect --process-id <pid>

# 4. 监控性能计数器
dotnet-counters monitor --process-id <pid>

实用技巧和快捷方式

使用 PowerShell 脚本自动化

# 批量创建项目
$projects = @("Core", "Data", "Services", "Api")
foreach ($project in $projects) {
dotnet new classlib -n "MyApp.$project"
dotnet sln add "MyApp.$project/MyApp.$project.csproj"
}

使用别名简化命令

# PowerShell
Set-Alias -Name dnb -Value "dotnet build"
Set-Alias -Name dnr -Value "dotnet run"
Set-Alias -Name dnt -Value "dotnet test"

# Bash/Zsh (~/.bashrc 或 ~/.zshrc)
alias dnb='dotnet build'
alias dnr='dotnet run'
alias dnt='dotnet test'
alias dnp='dotnet publish'

global.json 管理 SDK 版本

# 创建 global.json 固定 SDK 版本
dotnet new globaljson --sdk-version 8.0.100

# global.json 内容示例
{
"sdk": {
"version": "8.0.100",
"rollForward": "latestPatch"
}
}

Directory.Build.props 统一项目配置

创建根目录的 Directory.Build.props:

<Project>
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<LangVersion>latest</LangVersion>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
</Project>

常用环境变量

# 设置 .NET CLI 输出语言
DOTNET_CLI_UI_LANGUAGE=en-US

# 禁用遥测
DOTNET_CLI_TELEMETRY_OPTOUT=1

# 设置包缓存位置
NUGET_PACKAGES=/path/to/packages

# 跳过首次运行体验
DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1

# 使用示例(PowerShell)
$env:DOTNET_CLI_TELEMETRY_OPTOUT = "1"
dotnet build

# 使用示例(Bash)
export DOTNET_CLI_TELEMETRY_OPTOUT=1
dotnet build

总结

最常用的命令速查

# 创建和管理
dotnet new sln -n MySolution
dotnet new console -n MyApp
dotnet sln add MyApp/MyApp.csproj

# 包管理
dotnet add package PackageName
dotnet remove package PackageName
dotnet list package

# 引用管理
dotnet add reference ../MyLibrary/MyLibrary.csproj
dotnet list reference

# 构建和运行
dotnet restore
dotnet build
dotnet run
dotnet test

# 发布
dotnet publish -c Release -o ./publish

# 工具
dotnet tool install -g ToolName
dotnet tool list -g

项目结构最佳实践

MySolution/
├── MySolution.sln
├── src/
│ ├── MyApp.Api/
│ ├── MyApp.Core/
│ ├── MyApp.Data/
│ └── MyApp.Models/
├── tests/
│ ├── MyApp.Api.Tests/
│ └── MyApp.Core.Tests/
├── docs/
├── scripts/
└── README.md

.NET CLI 是一个功能强大的工具,掌握这些命令可以大大提高开发效率。建议常用命令熟练掌握,其他命令需要时查阅即可。