Language support C# / .NET

Move every .NET repo to .NET 10 in one coordinated run.

.NET Core 1.0 through .NET 10, NuGet management, xUnit-to-TUnit test migration, and code-quality cleanup modeled on Roslynator. Built on the Lossless Semantic Tree, now fully C#-aware.

Why C# at Moderne

C# is now fully represented in the LST.

A compiler-accurate model of every C# file lands in the Lossless Semantic Tree, with NuGet and .csproj support on the same engine that ships Java migrations today.

Semantic correctness, not regex.

Recipes operate on a compiler-accurate structural model with full symbol and type resolution. Format, comments, and conventions are preserved on every run.

Portfolio-scale orchestration.

Coordinate version upgrades, dependency bumps, and code-quality cleanups across hundreds of repos in one coordinated run. The .NET Upgrade Assistant guided one project at a time; it was deprecated in late 2025.

Code quality the .NET community already uses.

Code-quality recipes are modeled against Roslynator and Meziantou diagnostics. Every recipe is validated against its equivalent Roslyn analyzer on real open-source repositories.

What you can migrate

Concrete .NET migration paths.

.NET 8 and .NET 9 both reach end-of-life on November 10, 2026. Every codebase on either version must migrate to .NET 10.

Version upgrade

.NET Core 1.0 → .NET 10

A single UpgradeToDotNet10 recipe chains through every intermediate version automatically. No staged per-version runs.

Version upgrade

.NET 6 / 7 / 8 / 9 → .NET 10

The compressed jump for currently-supported codebases. EOL deadline locks in the timeline for .NET 8 and 9.

Framework

ASP.NET Framework → ASP.NET Core

Migration off the legacy framework onto the modern .NET runtime, including project file and dependency restructuring.

Tests

xUnit → TUnit

Attribute mapping, lifecycle conversion, assertion rewriting, and dependency updates. Ships as a single recipe chain.

Dependencies

NuGet and .csproj management

Parse and transform .csproj project files. Upgrade NuGet packages and update project references across the repository estate.

Quality

Code-style cleanup

File-scoped namespaces, pattern matching, nameof, expression-bodied members, and other modern C# idioms applied consistently.

Performance

Performance cleanups

StringBuilder chains, CancellationToken propagation, and accidental boxing flagged and rewritten.

Quality

Redundancy and simplification

Unused declarations, redundant casts, unnecessary async/await wrappers, boolean-literal comparisons, and null-coalescing chains.

Migrating hundreds of .NET repositories to .NET 10 would have cost us hundreds of engineering hours. With Moderne, we did it at a scale and speed that simply wouldn’t have been possible otherwise.
David Thoma Head of Engineering, Billtrust

How it works

Three steps, every language.

  1. Ingest the LST.

    Moderne parses every C# file across every repo into a Lossless Semantic Tree. Types, symbols, comments, formatting, and .csproj dependency metadata are preserved.

  2. Run the recipe.

    Recipes execute against the LST. .NET upgrades, NuGet updates, and quality cleanups apply deterministically across every affected file.

  3. Review and merge.

    Tier-1 transformations open as reviewable pull requests across every repo touched. Tier-2 changes with behavioral implications are flagged inline so your team decides before merge.

Questions

.NET modernization, answered.

Moderne’s migration recipes cover the full range from .NET Core 1.0 through .NET 10, including ASP.NET Framework to Core migrations. Running a single UpgradeToDotNet10 recipe chains through every intermediate version automatically.

Microsoft’s .NET Upgrade Assistant has been officially deprecated as of late 2025. Moderne applies the same migrations deterministically across hundreds of repositories in a single coordinated run, delivering reviewable pull requests at scale — without manual supervision at each step. Where the .NET Upgrade Assistant guided one project at a time, Moderne handles your entire portfolio.

Yes. Moderne parses and transforms .csproj project files to upgrade NuGet packages and update project references across entire repository estates — extending transformation coverage beyond application code to the dependency layer.

Moderne’s migration model runs in two tiers. Tier 1 covers transformations with a clear, known target state and applies them automatically. Tier 2 surfaces changes with behavioral implications — these are flagged with inline markers and explanations so your team decides before any transformation runs. You get the automated wins immediately and a prioritized list of what needs a decision.

Yes. C# is now fully represented in the Moderne Lossless Semantic Tree, giving coding agents a semantic model of your .NET codebase to analyze and propose changes against. Recipes provide the governed execution layer that applies agent-proposed changes safely and consistently across repositories.

Moderne’s code quality recipes are modeled against established Roslynator and Meziantou diagnostics — the same standards the .NET community already uses for static analysis. Every recipe is validated against its equivalent Roslyn analyzer on real open source repositories.

Get started

Modernize .NET once. Stay current as new versions ship.

Recipes lock in the upgrade. Future .NET LTS jumps run on the same engine, on the same review workflow.