mcpbeat

Converting To SDK Style

microsoft/converting-to-sdk-style

> Converts legacy non-SDK-style .NET project files (.csproj, .vbproj, .fsproj) to modern SDK-style format while preserving target frameworks, dependencies, and build behavior. Use when converting old-format .NET projects, migrating from packages.config to PackageReference, or modernizing project files. Also triggers for "convert to SDK style", "modernize csproj", "update project format", "legacy project migration", and "SDK-style conversion".

1k tokens
context cost
the whole folder, loaded on every use
1
files
instructions only
0
copies elsewhere
how many repositories repackaged it
17
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/microsoft/upgrade-agent-plugins --skill converting-to-sdk-style

The instruction itself

12 sections, as written by the author

SDK Style Conversion

Overview

Guide the step-by-step conversion of legacy (non SDK-style) project files to SDK-style while preserving existing target frameworks, behavior, and build output. This is a structural-only conversion — no target framework changes or functional refactors.

Hard Constraints

  • Do not change, add, remove, or upgrade TargetFramework/TargetFrameworks values — this conversion is format-only, not an upgrade
  • Do not introduce new package versions unrelated to conversion — package drift causes subtle runtime issues
  • Only convert the project format using the provided tools and fix build issues directly caused by the conversion

Available Tools

  • Project ordering tool: Use a tool capability to obtain the topological (dependency) order. Do not hand-compute and stop if unsuccessful
  • SDK style conversion tool: Use the dedicated conversion tool for each project. Do not manually rewrite XML and stop if unsuccessful

Workflow

Execution

Use appropriate tools (not direct file reads) to gather project information. For each project in topological order, convert one project at a time — never invoke the conversion tool for multiple projects in parallel (the underlying MSBuild engine uses shared global state that is not safe for concurrent access):

  • Invoke the SDK style conversion tool and wait for it to complete
  • Build the converted project directly (not the solution) — solution-level builds introduce noise from unconverted downstream projects. If build fails, see "Common Issues" below. If warnings/errors exceed context window capacity, process them in chunks
  • If failures persist and cannot be resolved without violating constraints, mark Status = Blocked, record the blocker in the plan file, and stop — do not proceed past a blocked dependency since downstream projects depend on it
  • If the project does not build after fix attempts, stop and let the user resolve it
  • Verify the packages.config file is removed from the project
  • Commit or checkpoint changes after each successful project (atomic progression)

Per-Project Checklist

- [ ] Used ordering tool output (not manual guess)
- [ ] Conversion tool executed (not a hand rewrite)
- [ ] No TargetFramework/TargetFrameworks modifications
- [ ] Project builds successfully
- [ ] Directly related tests pass
- [ ] Plan file status updated
- [ ] Minimal diff (only removed redundant legacy metadata now implicit in SDK style)

Common Issues

ItemGroup with removed items that shouldn't be included with globbing

The conversion tool adds a special label to ItemGroups tracking files excluded from globbing. After a successful build, check for this condition unless told to ignore it. If found, list the files for the user and get confirmation before removing them. If declined, leave as-is and continue.

Missing packages

If the converted project is missing packages, identify and restore them. Keep all package versions identical — version changes are out of scope for format conversion.

Handling Blockers

When a project fails to build after reasonable, minimal fixes:

  • Revert any speculative edits unrelated to conversion
  • Capture error messages in the plan file's Notes column
  • Mark Status = Blocked and stop — escalate or request user input before proceeding to dependent projects
  • When uncertain, ask the user for guidance

Success Criteria

  • All projects converted from legacy to SDK-style format
  • All projects build successfully with no target framework changes
  • Plan file shows all projects as "Done" or has documented blockers
  • All packages.config files removed from converted projects

Follow these instructions exactly. Ask for guidance if an action would require modifying target frameworks or performing broader upgrades.

How to use it

Copy the folder

Take microsoft/converting-to-sdk-style from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.