name: clean description: 递归清理 bin/obj 文件夹,可选清理包缓存和构建产物 argument-hint: “[–all] [–packages] [–artifacts] [–dry-run] [–project <name>]” allowed-tools: Bash, Glob, Read, AskUserQuestion
/dotnet:clean
递归清理构建产物(bin/obj 文件夹),可选清理包缓存和产物文件夹。
参数
从 $ARGUMENTS 解析参数:
| 标志 | 描述 | 默认值 |
|---|---|---|
--all |
清理 bin、obj、包和产物 | false |
--packages |
同时清理解决方案的 NuGet 包缓存 | false |
--artifacts |
同时清理发布/产物文件夹 | false |
--project <路径> |
目标特定项目(模糊匹配) | 所有项目 |
--dry-run |
显示将删除的内容而不实际删除 | false |
工作流程
步骤 1:定位目标
如果指定 --project:
- 使用 Glob 查找匹配的
.csproj文件 - 将清理范围限制在该项目的目录
如果未指定项目:
- 在当前/父目录中查找解决方案文件
- 清理解决方案目录树中的所有项目
步骤 2:查找要清理的目录
始终清理:
**/bin/目录**/obj/目录
如果 --packages 或 --all:
- 本地
.packages/文件夹(如果存在) - 该解决方案的 NuGet HTTP 缓存(使用
dotnet nuget locals http-cache --clear)
如果 --artifacts 或 --all:
**/publish/目录**/artifacts/目录**/.artifacts/目录(SDK 风格产物输出)
步骤 3:计算大小
在删除前,计算总大小:
# 对每个找到的目录,求和大小
du -sh <directories>
步骤 4:执行或报告
如果 --dry-run:
将删除以下目录:
bin/obj 文件夹:
src/MyApp/bin/ (45 MB)
src/MyApp/obj/ (12 MB)
tests/MyApp.Tests/bin/ (23 MB)
tests/MyApp.Tests/obj/ (8 MB)
总计:4 个目录,88 MB
运行时不带 --dry-run 以删除。
如果不是 --dry-run:
-
使用平台适当的命令删除目录:
- Windows:
Remove-Item -Recurse -Force或rm -rf(Git Bash) - Unix:
rm -rf
- Windows:
-
报告结果:
清理了 4 个目录,释放了 88 MB
已删除:
src/MyApp/bin/
src/MyApp/obj/
tests/MyApp.Tests/bin/
tests/MyApp.Tests/obj/
步骤 5:清理 NuGet 缓存(如果请求)
如果 --packages 或 --all:
dotnet nuget locals http-cache --clear
dotnet nuget locals temp --clear
报告缓存清理结果。
平台考虑
Windows(Git Bash):
find . -type d \( -name "bin" -o -name "obj" \) -exec rm -rf {} + 2>/dev/null || true
Windows(PowerShell) - 避免使用:
不要使用 PowerShell 进行删除。改用 Git Bash 的 rm -rf。
Unix/macOS:
find . -type d \( -name "bin" -o -name "obj" \) -exec rm -rf {} + 2>/dev/null || true
输出格式
模拟运行:
[模拟运行] 将清理以下内容:
bin/obj 文件夹(4 个目录,88 MB):
- src/MyApp/bin/ (45 MB)
- src/MyApp/obj/ (12 MB)
- tests/MyApp.Tests/bin/ (23 MB)
- tests/MyApp.Tests/obj/ (8 MB)
运行时不带 --dry-run 以删除。
实际清理:
清理了 .NET 构建产物
移除了:4 个目录
释放了:88 MB
已删除目录:
- src/MyApp/bin/
- src/MyApp/obj/
- tests/MyApp.Tests/bin/
- tests/MyApp.Tests/obj/
包含包清理:
清理了 .NET 构建产物和 NuGet 缓存
构建产物:4 个目录,88 MB
NuGet HTTP 缓存:已清理
NuGet 临时缓存:已清理
总计释放:约 150 MB
示例
# 清理 bin 和 obj 文件夹
/dotnet:clean
# 预览将清理的内容
/dotnet:clean --dry-run
# 清理所有内容,包括包缓存
/dotnet:clean --all
# 清理特定项目
/dotnet:clean --project MyApp.Api
# 清理包括产物文件夹
/dotnet:clean --artifacts
安全性
- 始终显示将删除的内容(除非使用 --dry-run)
- 不删除源文件
- 不删除 git 跟踪的文件
- 跳过删除失败的目录(报告它们)