Upgrade paths tested from .NET 8, 9 and 10

Each path was tested on a Minimal API with EF Core migrations, OpenAPI and integration tests. It includes what to do about Swashbuckle if your app started on the .NET 8 template.

18 breaking changes, each with its fix

OpenAPI transformers that stop compiling, a failed BackgroundService that now fails RunAsync, EF Core defaulting to SQL Server 2022, and 15 more.

6 free wins when you upgrade

Split queries that drop joins they don't need, no pointless CASTs in your SQL, zstd compression on by default, all without changing a line of code.

C# 15: union types the compiler checks

5 features, including closed hierarchies, extension indexers, and labeled break and continue. If you use the OneOf package today, unions are its replacement.

ASP .NET Core: async validation in Minimal APIs

9 features, including OpenAPI 3.2 by default, built-in OpenTelemetry tracing, the [ShortCircuit] attribute and CacheView for Blazor.

EF Core: FullJoin that translates to SQL

5 features, including MaxByAsync, indexes on complex types, JSON_CONTAINS on SQL Server 2025 and a config file for dotnet ef.

.NET libraries: Zstandard compression, built in

4 features, including EqualityComparer.Create, JSON Lines output and a process API that captures stdout and stderr with no deadlocks.

Extensions: async options validation at startup

Plus generic [LoggerMessage] methods. With the log level off, 1,000 calls allocate 24,000 bytes on .NET 10 and 0 bytes on .NET 11.

SDK: test limits that apply to the whole run

--maximum-failed-tests and --timeout now cover the whole dotnet test run across projects, and included files in file-based apps can declare their own packages.

Runtime async: from 13 stack frames to 5

That's the live stack of a 3-method async chain, with your real call chain in it. It's off by default and still a preview feature.

Windows Forms: toggle switches and kiosk mode

3 features: a modern renderer for buttons and text boxes, KioskModeManager, and SuspendPainting to replace your BeginUpdate and SuspendLayout pairs.

.NET MAUI moves to CoreCLR

It replaces Mono on Android, iOS, tvOS and Mac Catalyst. For WPF, the release notes list bug fixes only, so there are no new APIs to learn.