Resolve Project References
.NET (Microsoft)OfficialPublished by .NET (Microsoft)
- Skill
- Guidelines
- Software development
- MIT
- No issues found
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
This skill provides guidance for developers analyzing MSBuild performance summaries. It specifically addresses the common pitfall of misinterpreting the ResolveProjectReferences target time, which often appears as a major bottleneck but actually reflects wall-clock wait time for dependent projects rather than CPU-intensive work. The skill instructs users to shift their focus toward Task Performance Summary data to identify actual build bottlenecks.
What it does
- Explains why ResolveProjectReferences time is often misleading in build logs.
- Clarifies that the reported time includes wait time for dependent project builds.
- Directs users to analyze Task Performance Summary data instead of Target Performance Summary.
- Provides methods for extracting task self-time from binlogs.
- Offers guidance on identifying true performance bottlenecks like Csc or ResolveAssemblyReference.
- Validates the analysis process to ensure developers do not waste time optimizing the wrong target.
When to use it
- When ResolveProjectReferences is identified as the most expensive target in a build performance summary.
- When a developer is attempting to optimize ResolveProjectReferences directly.
- When a single target appears to consume 50-80% of total build time.
- When a diagnostic build log or binlog is available for analysis.
Advantages
- Prevents wasted engineering effort on non-actionable targets.
- Improves accuracy in build performance diagnostics.
- Directs developers to actionable task-level metrics.
- Reduces confusion regarding MSBuild performance reporting.
Usage examples
- “Why is ResolveProjectReferences taking 90% of my build time?”
- The agent explains that this is likely a misleading metric caused by waiting for dependencies and guides the user to check the Task Performance Summary for the actual bottleneck.
- “How do I optimize ResolveProjectReferences?”
- The agent clarifies that this target is usually not the source of the delay and provides steps to identify the real task-level performance issues.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/dotnet/resolve-project-references/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip resolve-project-references.zip -d .agents/skills
Documentation by .NET (Microsoft)
Misleading 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 SummaryA developer is trying to optimize
ResolveProjectReferencesdirectlyBuild 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.logFocus 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
Files
- ATTRIBUTION.mdAdded by AutoGineer866 B
- LICENSELicence file added by AutoGineer1.1 KiB
- SKILL.md2.9 KiB
LICENSE
The MIT License (MIT) Copyright (c) .NET Foundation and Contributors All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs an MCP server, Needs Node.js
Security
No issues found by our static scan· No issues found
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Published by
- .NET (Microsoft)
- Publisher
- .NET (Microsoft) (Official)
- Source
- dotnet/skills · plugins/dotnet-msbuild/skills/resolve-project-references · commit 96c3d68
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by .NET (Microsoft).
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download resolve-project-references.zip