Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generate MSBuild binary logs (binlogs) for build diagnostics and analysis. USE FOR: adding /bl:{} to any dotnet build, test, pack, publish, or restore command to capture a full build execution trace, prerequisite for binlog-failure-analysis and build-perf-diagnostics skills, enabling post-build investigation of errors or performance. Requires MSBuild 17.8+ / .NET 8 SDK+ for {} placeholder; PowerShell needs -bl:{{}}. DO NOT USE FOR: non-MSBuild build systems (npm, Maven, CMake), analyzing an exis
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -7% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 11% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 8% | 0% |
| case-06 | ✗→✓ | ▲ Improved | -13% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 11% | 0% |
Pass the /bl switch when running any MSBuild-based command. This is a non-negotiable requirement for all .NET builds.
You MUST add the /bl:{} flag to:
dotnet builddotnet testdotnet packdotnet publishdotnet restoremsbuild or msbuild.exe{} for Automatic Unique Names> Note: The {} placeholder requires MSBuild 17.8+ / .NET 8 SDK or later.
The {} placeholder in the binlog filename is replaced by MSBuild with a unique identifier, guaranteeing no two builds ever overwrite each other — without needing to track or check existing files.
bash# Every invocation produces a distinct file automatically dotnet build /bl:{} dotnet test /bl:{} dotnet build --configuration Release /bl:{}
PowerShell requires escaping the braces:
powershell# PowerShell: escape { } as {{ }} dotnet build -bl:{{}} dotnet test -bl:{{}}
bash# ✅ CORRECT - {} generates a unique name automatically (bash/cmd) dotnet build /bl:{} dotnet test /bl:{} # ✅ CORRECT - PowerShell escaping dotnet build -bl:{{}} dotnet test -bl:{{}} # ❌ WRONG - Missing /bl flag entirely dotnet build dotnet test # ❌ WRONG - No filename (overwrites the same msbuild.binlog every time) dotnet build /bl dotnet build /bl
Add /bl:{} to every MSBuild invocation separately — never reuse a name and never rely on bare /bl:
command still gets its own /bl:{} so the logs never overwrite each other.
bashdotnet build -c Debug /bl:{} # unique file dotnet build -c Release /bl:{} # another unique file
After the build, confirm a .binlog was actually produced before moving on to analysis — a build that fails before MSBuild starts (e.g. a bad argument) writes no binlog:
bashls -1 *.binlog # bash dir /b *.binlog # Windows cmd
powershellGet-ChildItem *.binlog # PowerShell
Note the resulting path so binlog-failure-analysis or build-perf-diagnostics can consume it.
If the binlog filename needs to be known upfront (e.g., for CI artifact upload), or if {} is not available in the installed MSBuild version, pick a name that won't collide with existing files:
*.binlog files in the directorybash# Example: directory contains 3.binlog — use 4.binlog dotnet build /bl:4.binlog
When cleaning the repository with git clean, always exclude binlog files to preserve your build history:
bash# ✅ CORRECT - Exclude binlog files from cleaning git clean -fdx -e "*.binlog" # ❌ WRONG - This deletes binlog files (they're usually in .gitignore) git clean -fdx
This is especially important when iterating on build fixes - you need the binlogs to analyze what changed between builds.
Other measured skills in the registry, with their headline benchmark lift.