.NET upgrades

Upgrade .NET solutions with verified, reviewable changes

Quick answer. For plain .NET, UpgradePilot derives target package versions from dotnet list package --outdated (not an LLM’s memory), bumps them across every project, verifies with dotnet restore, upgrades target frameworks, applies Roslyn codemods, checks EF Core migrations, and validates with a real build and test run.

The problem

Upgrading a .NET solution means touching every project file, chasing transitive package conflicts and fixing the APIs that changed.

AI that guesses package versions produces plausible but wrong results; the only safe check is a real restore and build.

What UpgradePilot does for .NET

  • Finds target versions with dotnet list package --outdated.
  • Updates NuGet references or Central Package Management across every .csproj.
  • Upgrades target frameworks and applies Roslyn rename codemods.
  • Runs EF Core migration checks; destructive operations are flagged, never silently applied.
  • Runs dotnet build and dotnet test, plus a NuGet vulnerability scan.
  • Generates upgrade documentation, a rollback plan and the pull request.

What you still review by hand

UpgradePilot is built so nothing is hidden: these are the places a person should look before merging.

  • Behavior changes documented in Microsoft’s breaking-change lists that tests may not cover.
  • Generated migrations and any schema or data change.
  • Packages that cannot move yet because a dependency has not published a compatible version.
  • Runtime and hosting configuration (containers, CI images, deployment targets).

Common pitfalls

  • A thin test suite means a passing build proves less — add characterization tests around critical paths first.
  • Pinned SDK versions in global.json and CI images must match the new target.

Documentation to review

Read the official notes for the versions you’re crossing alongside the pull request UpgradePilot produces.

.NET upgrade FAQ

Does it support Central Package Management?

Yes. Package bumps work with both per-project PackageReference versions and Central Package Management.

How are target versions chosen?

From dotnet list package --outdated, then verified with dotnet restore. A caller can override the result by hand.

What about multi-project solutions?

Every .csproj in the solution is handled, not just the startup project.

Related stacks

ABP FrameworkASP.NET Zero.NET + React/Next.jsAll documentation

Want a second pair of eyes on your upgrade?

Tell us your stack and current version. We’ll reply with what’s involved and whether the free app or Cloud fits.