build-parallelism
Guide for optimizing MSBuild build parallelism and multi-project scheduling.
Skill by SteffenCarlsen
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/steffencarlsen-build-parallelism
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: backend, productivity, agent-building
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/build-parallelism
What's inside
- Skill name
build-parallelism- Description
- Guide for optimizing MSBuild build parallelism and multi-project scheduling. Only activate in MSBuild/.NET build context. USE FOR: builds not utilizing all CPU cores, speeding up multi-project solutions, evaluating graph build mode (/graph), build time not improving with -m flag, understanding project dependency topology. Note: /maxcpucount default is 1 (sequential) — always use -m for parallel builds. Covers /maxcpucount, graph build for better scheduling and isolation, BuildInParallel on MSBuild task, reducing unnecessary ProjectReferences, solution filters (.slnf) for building subsets. DO NOT USE FOR: single-project builds, incremental build issues (use incremental-build), compilation slowness within a project (use build-perf-diagnostics), non-MSBuild build systems. INVOKES: binlog MCP server tools (expensive_projects, expensive_targets, project_target_times); falls back to dotnet build -m, dotnet build /graph, binlog replay + grep.
- License
- MIT
- Instructions
- 76 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
## MSBuild Parallelism Model - `/maxcpucount` (or `-m`): number of worker nodes (processes) - Default: 1 node (sequential!). Always use `-m` for parallel builds - Recommended: `-m` without a number = use all logical processors - Each node builds one project at a time - Projects are scheduled based on dependency graph ## Project Dependency Graph - MSBuild builds projects in dependency order (topological sort) - Critical path: longest chain of dependent projects determines minimum build time - Bottleneck: if project A depends on B, C, D and B takes 60s while C and D take 5s, B is the bottleneck - Diagnosis: replay binlog to diagnostic log with `performancesummary` and check Project Performance Summary — shows per-project time; grep for `node.*assigned` to check scheduling - Wide graphs (many independent projects) parallelize well; deep graphs (long chains) don't ## Graph Build Mode (`/graph`) - `dotnet build /graph` or `msbuild /graph` - What it changes: MSBuild constructs the full project dependency graph BEFORE building - Benefits: better scheduling, avoids redundant evaluations, enables isolated builds - Limitations: all projects must use `<ProjectReference>` (no programmatic MSBuild task references) - When to use: large solutions with many projects, CI builds - When NOT to use: projects that dynamically discover references at build time ## Optimizing Project References - Reduce unnecessary `<ProjectReference>` — each adds to the dependency chain - Use `<ProjectReference ... SkipGetTargetFrameworkProperties="true">` to avoid extra evaluations - `<ProjectReference ... ReferenceOutputAssembly="false">` for build-order-only dependencies - Consider if a ProjectReference should be a PackageReference instead (pre-built NuGet) - Use `solution filters` (`.slnf`) to build subsets of the solution ## BuildInParallel - `<MSBuild Projects="@(ProjectsToBuild)" BuildInParallel="true" />` in custom targets - Without `BuildInParallel="true"`, MSBuild task batches projects sequentially - Ensure `/maxcpucount` > 1 for this to have effect ## Multi-threaded MSBuild Tasks - Individual tasks can run multi-threaded within a single project build - Tasks implementing `IMultiThreadableTask` can run on multiple threads - Tasks must declare thread-safety via `[MSBuildMultiThreadableTask]` ## Analyzing Parallelism with Binlog ### Primary: binlog MCP (preferred) Use the **binlog MCP server** (`Microsoft.AITools.BinlogMcp`, exposed under the `binlog` MCP namespace): 1. Use expensive_projects tool → find the slowest projects and compare individual vs total build time 2. Use expensive_targets tool → find bottleneck targets 3. Use project_target_times tool → drill into a specific project's target-level timing 4. Ideal: build time should be much less than sum of project times (parallelism) 5. If build time ≈ sum of project times: too many serial dependencies, or one slow project blocking others ### Fallback: text-log replay (when MCP is unavailable) Step-by-step: 1. Replay the binlog: `dotnet msbuild build.binlog -noconlog -fl -flp:v=diag;logfile=full.log;performancesummary` 2. Check Project Performance Summary at the end of `full.log` 3. Ideal: build time should be much less than sum of project times (parallelism) 4. If build time ≈ sum of project times: too many serial dependencies, or one slow project blocking others 5. `grep 'Target Performance Summary' -A 30 full.log` → find the bottleneck targets 6. Consider splitting large projects or optimizing the critical path ## CI/CD Parallelism Tips - Use `-m` in CI (many CI runners have multiple cores) - Consider splitting solution into build stages for extreme parallelism - Use build caching (NuGet lock files, deterministic builds) to avoid rebuilding unchanged projects - `dotnet build /graph` works well with structured CI pipelines
From SteffenCarlsen/agent-skills, MIT.
More from SteffenCarlsen/agent-skills
- 0.524score
code-testing-agent
SteffenCarlsen
Generates and writes new unit tests for any programming language using a Research-Plan-Implement pipeline.
SkillBFreshness: BClaude Code +9 - 0.479score
android-tombstone-symbolication
SteffenCarlsen
Symbolicate the .NET runtime frames in an Android tombstone file.
SkillCFreshness: CClaude Code +9 - 0.479score
convert-to-cpm
SteffenCarlsen
Convert .NET projects and solutions (.sln, .slnx) to NuGet Central Package Management (CPM) using Directory.Packages.props.
SkillCFreshness: CClaude Code +9 - 0.479score
author-component
SteffenCarlsen
Create or review Blazor components (.razor files) with correct architecture.
SkillCFreshness: CClaude Code +9 - 0.479score
clr-activation-debugging
SteffenCarlsen
Diagnoses .NET Framework CLR activation issues using CLR activation logs (CLRLoad logs) produced by mscoree.dll.
SkillCFreshness: CClaude Code +9 - 0.479score
apple-crash-symbolication
SteffenCarlsen
Symbolicate .NET runtime frames in Apple platform .ips crash logs (iOS, tvOS, Mac Catalyst, macOS).
SkillCFreshness: CClaude Code +9 - 0.474score
binlog-failure-analysis
SteffenCarlsen
Analyze MSBuild binary logs to diagnose build failures.
SkillCFreshness: CClaude Code +9 - 0.474score
build-perf-baseline
SteffenCarlsen
Establish build performance baselines and apply systematic optimization techniques.
SkillCFreshness: CClaude Code +9 - 0.474score
build-perf-diagnostics
SteffenCarlsen
Diagnose MSBuild build performance bottlenecks using binary log analysis.
SkillCFreshness: CClaude Code +9 - 0.474score
check-bin-obj-clash
SteffenCarlsen
Detects MSBuild projects with conflicting OutputPath or IntermediateOutputPath.
SkillCFreshness: CClaude Code +9 - 0.474score
assertion-quality
SteffenCarlsen
Analyzes the variety and depth of assertions across .NET test suites.
SkillCFreshness: CClaude Code +9 - 0.474score
convert-blazor-server-to-webapp
SteffenCarlsen
Guides conversion of a pre-.NET 8 Blazor Server app into a .NET 8+ Blazor Web App.
SkillCFreshness: CClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Jul 15, 2026 (3 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/SteffenCarlsen/agent-skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from SteffenCarlsen
- 0.524score
code-testing-agent
SteffenCarlsen
Generates and writes new unit tests for any programming language using a Research-Plan-Implement pipeline.
SkillBFreshness: BClaude Code +9 - 0.479score
apple-crash-symbolication
SteffenCarlsen
Symbolicate .NET runtime frames in Apple platform .ips crash logs (iOS, tvOS, Mac Catalyst, macOS).
SkillCFreshness: CClaude Code +9 - 0.479score
clr-activation-debugging
SteffenCarlsen
Diagnoses .NET Framework CLR activation issues using CLR activation logs (CLRLoad logs) produced by mscoree.dll.
SkillCFreshness: CClaude Code +9 - 0.479score
author-component
SteffenCarlsen
Create or review Blazor components (.razor files) with correct architecture.
SkillCFreshness: CClaude Code +9 - 0.479score
android-tombstone-symbolication
SteffenCarlsen
Symbolicate the .NET runtime frames in an Android tombstone file.
SkillCFreshness: CClaude Code +9 - 0.479score
convert-to-cpm
SteffenCarlsen
Convert .NET projects and solutions (.sln, .slnx) to NuGet Central Package Management (CPM) using Directory.Packages.props.
SkillCFreshness: CClaude Code +9
Cite this page
build-parallelism skill. Agent Mart. https://agentmart.dev/skills/steffencarlsen-build-parallelism (last updated 2026-10-24)