其他
在 .NET/MSBuild 构建时生成 binlog…
对任何基于 MSBuild 的 dotnet 命令添加 /bl:{} 开关,自动生成唯一命名的二进制构建日志,便于事后分析错误与性能。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 47/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 47/100 ×0.15
适用场景
在 .NET/MSBuild 构建时生成通用
解决思路
- 在所有基于 MSBuild 的命令上添加 /bl:{} 标志,包括 dotnet build、dotnet test、dotnet pack、dotnet publish、dotnet restore、msbuild 或 msbuild.exe,以及任何调用 MSBuild 的命令。
- 优先使用 {} 占位符让 MSBuild 自动替换为唯一标识符,保证两次构建不会互相覆盖,无需手动跟踪或检查已有文件(需要 MSBuild 17.8+ / .NET 8 SDK 或更高版本)。
- 在 PowerShell 中需将花括号转义为 {{ }},例如 dotnet build -bl:{{}}、dotnet test -bl:{{}}。
- 每次 MSBuild 调用都单独添加 /bl:{},不要复用文件名,也不要依赖裸 /bl;例如构建多个配置时分别执行 dotnet build -c Debug /bl:{} 和 dotnet build -c Release /bl:{}。
- 构建完成后验证确实生成了 .binlog 文件(构建在 MSBuild 启动前就失败时不会写入 binlog):bash 用 ls -1 *.binlog,Windows cmd 用 dir /b *.binlog,PowerShell 用 Get-ChildItem *.binlog。
- 记录生成的 binlog 路径,以便 binlog-failure-analysis 或 build-perf-diagnostics 技能消费。
- 当必须预先指定文件名(如 CI 产物上传)或已安装的 MSBuild 版本不支持 {} 时,先检查目录中已有的 *.binlog 文件,再选择一个不冲突的名字(例如从已有最大编号递增,如目录中已有 3.binlog 则用 4.binlog)。
- 使用 git clean 清理仓库时始终排除 binlog 文件以保留构建历史:git clean -fdx -e "*.binlog",不要直接运行 git clean -fdx。
适用边界 · 注意事项
- 非 MSBuild 构建系统(如 npm、Maven、CMake)不适用。
- 分析已有的 binlog 时不要用本技能,应改用 binlog-failure-analysis。
- 不要使用裸 /bl(无文件名),否则每次都会覆盖同一个 msbuild.binlog。