Resolve Project References

作者 dotnet0608d8924cd3MIT5.5K 个星标收录于 2026年10月8日更新于 2026年10月8日仓库今天更新

Guide for interpreting ResolveProjectReferences time in MSBuild performance summaries. Activate when ResolveProjectReferences appears as the most expensive target and developers are trying to optimize it directly. Explains that the reported time includes wait time for dependent project builds and is misleading. Guides users to focus on task self-time instead. Do not activate for general build performance -- use build-perf-diagnostics instead.

AI 生成的概览

说明 MSBuild 摘要中 ResolveProjectReferences 耗时为何具有误导性,并引导优化任务自身耗时。

功能
该技能指导如何解读 MSBuild 性能摘要中 ResolveProjectReferences 成为最耗时目标的情况。它说明所报告的时间是等待依赖项目生成的墙钟时间,而非 CPU 工作量,并引导用户查看任务性能摘要以找到真正的瓶颈。它产出的是指导与验证步骤,而不是文件或代码改动。
适用场景
当 ResolveProjectReferences 在目标性能摘要中位居首位,且有人试图直接优化该目标时使用。它不适用于一般生成性能优化、其他目标的瓶颈,或尚未捕获 binlog 或性能摘要的情况。
运行要求
需要包含目标性能摘要的诊断生成日志或 binlog。首选方式使用 binlog MCP 服务器的 expensive_tasks 工具;备用方式通过 dotnet msbuild 重放 binlog 并检索文本日志。不附带脚本。

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

  • ResolveProjectReferences appears as the most expensive target in the Target Performance Summary
  • A developer is trying to optimize ResolveProjectReferences directly
  • 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-diagnostics instead)
  • The bottleneck is clearly a different target (e.g., Csc, ResolveAssemblyReference)
  • The user has not yet captured a binlog or performance summary

Inputs

InputRequiredDescription
Build log or binlogYesA 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)
bash
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-diagnostics skill (Section 2: Roslyn Analyzers)
  • ResolveAssemblyReference: see build-perf-diagnostics skill (Section 1: RAR)
  • Copy: see build-perf-diagnostics skill (Section 4: File I/O)
  • Serialization bottlenecks: see build-parallelism skill

Validation

  • Task Performance Summary was used instead of Target Performance Summary
  • ResolveProjectReferences was not set as the optimization target
  • A concrete task (e.g., Csc, Copy, ResolveAssemblyReference) was identified as the true bottleneck

来源与署名

来源:dotnet/skills位于plugins/dotnet-msbuild/skills/resolve-project-references提交0608d89

许可证: MIT

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架