eval-performance

Diagnose slow MSBuild startup by analyzing evaluation phases in binlog and /pp:full.xml.

1|Updated May 21, 2026
One-click install
npx skills add https://github.com/1k-off/umbraco-observability-playground --skill eval-performance-1k-off
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: eval-performance
Source: https://github.com/1k-off/umbraco-observability-playground/tree/main/.agents/skills/eval-performance
Command: npx skills add https://github.com/1k-off/umbraco-observability-playground --skill eval-performance-1k-off

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

It helps diagnose why MSBuild builds are slow to start due to expensive project evaluation—before any compilation even begins.

Core Features & Use Cases

  • Pinpoints MSBuild evaluation overhead: breaks down the 5 evaluation phases and identifies where time is being spent.
  • Uses binlog and timing signals: replays build.binlog to locate “Evaluation started/finished” spans and detect repeated evaluations of the same project.
  • Reveals heavy project expansion and import chains: uses /pp:full.xml preprocessing to inspect the fully expanded project and diagnose deep or excessive imports.
  • Targets common root causes: flags broad glob patterns that traverse huge directories (e.g., node_modules, .git, bin/obj), and highlights costly property functions that perform file I/O during evaluation.
  • Provides concrete optimization actions: recommends excluding large directories via DefaultItemExcludes, tightening globs, reducing import depth, avoiding evaluation-time file I/O in property functions, and using graph build to reduce redundant evaluations.

Quick Start

Run the skill to analyze MSBuild evaluation time for a slow-starting .csproj using a binlog replay and /pp:full.xml to identify the specific evaluation phase, glob/import/property-function causes, and redundant evaluations.

Frequently Asked Questions about eval-performance

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
Why does MSBuild take so long before compilation starts?

Slow MSBuild startup is typically caused by expensive project evaluation, where broad glob patterns, deep import chains, or property functions performing file I/O delay the build before any compilation begins.

How do I diagnose slow .NET build performance using a binlog?

To diagnose slow .NET build performance, replay your build.binlog to locate "Evaluation started/finished" spans, detect repeated evaluations of the same project, and break down the 5 evaluation phases to find the bottleneck.

What is the best way to find heavy MSBuild imports causing evaluation delays?

The best way to find heavy MSBuild imports is to use the /pp:full.xml preprocessing flag to inspect the fully expanded project, which reveals deep or excessive import chains that inflate evaluation time.

How do I optimize MSBuild glob patterns traversing large directories?

Optimize MSBuild glob patterns by excluding large directories like node_modules, .git, and bin/obj via DefaultItemExcludes, tightening broad globs, and using graph build to reduce redundant project evaluations.

Can property functions cause MSBuild evaluation overhead?

Yes, property functions can cause MSBuild evaluation overhead when they perform costly file I/O operations during the evaluation phase, which blocks the build pipeline before compilation starts.

Does this approach work for diagnosing redundant MSBuild project evaluations?

Yes, this approach works for diagnosing redundant MSBuild project evaluations by replaying the binlog to detect repeated evaluations of the same project and validating fixes through reduced evaluation counts and optimized item behavior.