resolve-project-references について
MSBuild のパフォーマンスを調査する開発スキルです。ResolveProjectReferences の時間には依存プロジェクトの待機が含まれる場合があると説明し、タスク自身の処理時間を調べる方法を示します。
主な機能
- 01誤解を招くターゲット時間の特定
- 02依存プロジェクト待機の説明
- 03タスクパフォーマンス概要の利用
- 04binlog 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 の所要時間
報告される所要時間は CPU 処理時間ではなく、壁時計時間であることを説明し、ResolveProjectReferences を誤って最適化するのを防ぎます。
使用する場合
- ターゲットパフォーマンスの概要で、
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 対応