.NET CLI 的一些使用方法

除了使用 Visual Studio 这个 IDE 把 .NET 应用程序源码编译为 exe 外还可使用 .NET CLI 命令行工具进行编译。

这种方法非常适合自动化脚本、CI/CD 流水线或在没有 IDE 的机器上操作。

.NET CLI编译

打开 命令行(CMD, PowerShell, 或 Bash)

  1. 导航到项目目录
1
cd path/to/your/project
  1. 使用 dotnet publish 命令
1
2
3
4
5
6
7
8
9
10
11
12
# 最基本的方式:为当前系统环境发布框架依赖的 Release 版本
dotnet publish -c Release

# 更常用的方式:为特定运行时(RID)发布独立(自包含)的单一 exe 文件
# 例如,为 Windows 64 位系统生成
dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true

# 为 Linux 64 位系统生成
dotnet publish -c Release -r linux-x64 --self-contained true -p:PublishSingleFile=true

# 为 macOS ARM64 系统生成
dotnet publish -c Release -r osx-arm64 --self-contained true -p:PublishSingleFile=true

参数解释:

  • -c Release: 指定配置为 Release

  • -r: 指定运行时标识符,例如 win-x64, win-x86, linux-x64 等。这是生成独立应用所必需的。

  • —self-contained true: 生成一个独立的应用,包含所有必要的 .NET 运行时和依赖项。生成的文件会更大,但用户无需安装 .NET Runtime。

  • -p:PublishSingleFile=true: 将所有依赖项打包到单个 exe 文件中,极大简化了分发。

  • -p:PublishTrimmed=true: (可选)启用剪裁,移除未使用的代码以减小文件大小。但需谨慎使用,可能在某些场景下引发问题。

  1. 输出位置
    编译后的文件将输出到 bin\Release\{target-framework}\{rid}\publish\ 目录下。
    例如:bin\Release\net8.0\win-x64\publish\

.NET CLI清除缓存

.NET restore 下载的包默认存储在全局的 NuGet 缓存目录中,而不是在项目文件夹里。

清除这些包的方法取决于你的目标:是只想清理某个项目的临时文件,还是想彻底清除整个全局缓存。

NuGet 全局缓存位置

这些包默认存储在以下位置:

  • Windows:

    • %USERPROFILE%\.nuget\packages

    • 例如:C:\Users\你的用户名\.nuget\packages

  • macOS / Linux:

  • ~/.nuget/packages

  • 例如:/home/你的用户名/.nuget/packages

这个 packages 文件夹里包含了所有你曾经为任何项目恢复过的 NuGet 包的各个版本。随着时间的推移,这个文件夹会变得非常大(几个GB很常见)

如何清除这些包

你有几种不同粒度的清除方式:

方法一:使用 .NET CLI 命令清除全局缓存

这是最安全、最官方的方法。

1
2
3
4
5
6
7
8
9
# 清除整个全局 NuGet 缓存(包括包和HTTP缓存)
dotnet nuget locals all --clear

# 或者,只清除包缓存(最常用)
dotnet nuget locals global-packages --clear

# 其他可选项
dotnet nuget locals http-cache --clear # 只清除HTTP请求缓存
dotnet nuget locals temp --clear # 只清除临时缓存

执行这个命令后,再下次运行 dotnet restoredotnet build 时,它会重新下载所需的包。

方法二:手动删除缓存文件夹

你也可以直接去文件资源管理器找到上述路径,然后手动删除整个 packages 文件夹。

  • Windows: 按 Win + R,输入 %USERPROFILE%\.nuget\packages,回车,然后删除该文件夹。

  • macOS/Linux: 在终端中运行 rm -rf ~/.nuget/packages

注意:手动删除虽然直接,但不如使用 dotnet nuget locals --clear 命令安全可靠。

只清除特定项目的包(obj 和 bin 文件夹)

很多时候,你想“清除”的目的是解决一些诡异的编译或依赖问题(比如”这个包版本不对”)。这时,你不需要动全局缓存,只需要清理项目的本地临时文件即可。

这些文件在项目的 objbin 文件夹里。

最佳实践是使用 dotnet clean 命令:

1
2
3
4
5
6
7
8
# 导航到项目或解决方案目录
cd path/to/your/project

# 清理项目的输出(默认是Debug配置)
dotnet clean

# 如果要清理Release配置的输出
dotnet clean -c Release

这个命令会删除 binobj 文件夹,但不会影响全局 NuGet 缓存。下次构建时,它会从全局缓存中提取包,并重新生成 objbin

如果想更彻底一点,可以直接手动删除项目目录下的 binobj 文件夹。效果和 dotnet clean 一样。