关于 resolve-project-references
面向 MSBuild 性能诊断的开发技能,说明 ResolveProjectReferences 耗时可能反映等待依赖项目的时间,并引导分析任务自身耗时。
主要功能
- 01识别易误读的目标耗时
- 02解释等待依赖项目的时间
- 03查看任务性能摘要
- 04用 binlog MCP 排序任务自身耗时
- 05使用文本日志作为备用方案
适用场景
- 01排查报告中 ResolveProjectReferences 耗时最高的情况
- 02将优化方向从目标耗时转向任务自身耗时
- 03从构建性能摘要中定位瓶颈
MCP 相关
该技能建议使用 binlog MCP 服务的 expensive_tasks 工具,根据构建日志排列任务自身耗时。
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dotnet/ skills --skill resolve-project-references安装后在 Claude Code 中输入/resolve-project-references确认已加载。
详细介绍
误导性的 ResolveProjectReferences 耗时
说明 ResolveProjectReferences 报告的耗时是等待时间(墙钟时间),而非 CPU 工作时间,以避免对它进行不恰当的优化。
适用场景
ResolveProjectReferences在目标性能摘要中显示为耗时最长的目标- 开发者正试图直接优化
ResolveProjectReferences - 构建性能分析显示,单个目标占总构建时间的 50-80%
不适用场景
- 一般构建性能优化(请改用
build-perf-diagnostics) - 瓶颈明显是其他目标(例如
Csc、ResolveAssemblyReference) - 用户尚未捕获 binlog 或性能摘要
输入
| 输入 | 必需 | 描述 |
|---|---|---|
| 构建日志或 binlog | 是 | 包含目标性能摘要的诊断构建日志或 binlog |
工作流
步骤 1:确认误导性现象
确认 ResolveProjectReferences 是目标性能摘要中的耗时最长目标。这是一个具有误导性的指标。
步骤 2:说明其误导之处
报告的耗时包含等待依赖项目构建的时间,此时 MSBuild 节点已让出执行权(参见 dotnet/msbuild#3135)。在此期间,该节点可能正在其他项目上执行有用的工作。目标本身实际执行的工作很少。
步骤 3:转而查看任务自身耗时
使用任务性能摘要来识别真正的瓶颈。
首选:binlog MCP
使用 binlog MCP 服务的 expensive_tasks 工具,直接从 binlog 获取任务自身耗时排名。
备用方案:文本日志重放(MCP 不可用时)
dotnet msbuild build.binlog -noconlog -fl "-flp:v=diag;logfile=full.log;performancesummary"
grep "Task Performance Summary" -A 50 full.log
重点关注实际任务自身的耗时:
- Csc:参见
build-perf-diagnostics技能(第 2 节:Roslyn 分析器) - ResolveAssemblyReference:参见
build-perf-diagnostics技能(第 1 节:RAR) - Copy:参见
build-perf-diagnostics技能(第 4 节:文件 I/O) - 序列化瓶颈:参见
build-parallelism技能
验证
- 使用了任务性能摘要,而不是目标性能摘要
- 未将
ResolveProjectReferences设为优化目标 - 已识别出一个具体任务(例如
Csc、Copy、ResolveAssemblyReference)作为真正的瓶颈
评论
支持 Markdown