About resolve-project-references
A diagnostic skill for developers investigating MSBuild performance reports. It explains why ResolveProjectReferences time can reflect waiting for dependent projects and directs analysis toward task self-time.
Key features
- 01Identify misleading target timings
- 02Explain waits on dependent projects
- 03Use task performance summaries
- 04Rank task self-time with binlog MCP
- 05Replay text logs as a fallback
Use cases
- 01Investigate ResolveProjectReferences at the top of a report
- 02Redirect optimization from target time to task self-time
- 03Find bottlenecks in build performance summaries
MCP support
The skill recommends the binlog MCP server’s expensive_tasks tool to rank task self-times from a build log.
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ dotnet/ skills --skill resolve-project-referencesAfter installing, type/resolve-project-referencesin Claude Code to confirm it loaded.
Details
From the project READMEMisleading ResolveProjectReferences Time
Prevent misguided optimization of ResolveProjectReferences by explaining that its reported time is wall-clock wait time, not CPU work.
When to Use
ResolveProjectReferencesappears as the most expensive target in the Target Performance Summary- A developer is trying to optimize
ResolveProjectReferencesdirectly - Build performance analysis shows a single target consuming 50-80% of total build time
When Not to Use
- General build performance optimization (use
build-perf-diagnosticsinstead) - The bottleneck is clearly a different target (e.g.,
Csc,ResolveAssemblyReference) - The user has not yet captured a binlog or performance summary
Inputs
| Input | Required | Description |
|---|---|---|
| Build log or binlog | Yes | A diagnostic build log or binlog containing the Target Performance Summary |
Workflow
Step 1: Confirm the misleading symptom
Verify that ResolveProjectReferences appears as the top target in the Target Performance Summary. This is the misleading metric.
Step 2: Explain why it is misleading
The reported time includes waiting for dependent projects to build while the MSBuild node is yielded (see dotnet/msbuild#3135). During this wait, the node may be doing useful work on other projects. The target itself does very little work.
Step 3: Redirect to task self-time
Use the Task Performance Summary to identify the real bottleneck.
Primary: binlog MCP (preferred)
Use the binlog MCP server expensive_tasks tool to get task self-time rankings directly from the binlog.
Fallback: text-log replay (when MCP is unavailable)
dotnet msbuild build.binlog -noconlog -fl "-flp:v=diag;logfile=full.log;performancesummary"
grep "Task Performance Summary" -A 50 full.log
Focus on self-time of actual tasks:
- Csc: see
build-perf-diagnosticsskill (Section 2: Roslyn Analyzers) - ResolveAssemblyReference: see
build-perf-diagnosticsskill (Section 1: RAR) - Copy: see
build-perf-diagnosticsskill (Section 4: File I/O) - Serialization bottlenecks: see
build-parallelismskill
Validation
- Task Performance Summary was used instead of Target Performance Summary
-
ResolveProjectReferenceswas not set as the optimization target - A concrete task (e.g.,
Csc,Copy,ResolveAssemblyReference) was identified as the true bottleneck