.NET 11 Is Here: C# 15 Union Types, a Faster SDK, and the End of the Line for .NET 8 and 9

Microsoft shipped .NET 11 on November 10, opening day of .NET Conf 2026, and this year’s release is a practical one. The headline is C# 15, the tooling gets noticeably faster, the AI building blocks Microsoft has been assembling all year land in the box — and the calendar forced the issue for a lot of teams, because .NET 8 and .NET 9 reached end of support the same day.

The headline: C# 15 union types

C# 15 is the default language version for projects targeting .NET 11, and its biggest addition is union types: a value can be one of a declared set of case types, with exhaustiveness checking in switch expressions. Microsoft’s own example is a product lookup that either finds a product or reports that it wasn’t found:

ProductLookup result = new Product(42, "Mechanical keyboard");

string message = result switch
{
    Product product => $"Found {product.Name}",
    ProductNotFound missing => $"No product with ID {missing.Id}",
};

public sealed record Product(int Id, string Name);
public sealed record ProductNotFound(int Id);

public union ProductLookup(Product, ProductNotFound);

The result type tells a caller exactly which outcomes it has to handle — no more reaching for object or an unrelated base class just to put two outcomes behind one return type, and the compiler complains if your switch misses a case.

Alongside unions, C# 15 adds closed hierarchies (a closed class limits direct derivation to its declaring assembly, so the compiler can check patterns over the whole hierarchy), collection expression arguments, extension indexers, and labeled break and continue. The separate memory-safety work stays in preview.

The part you’ll feel every day: a faster SDK

The headline features get the blog posts, but the SDK changes are what you’ll notice on Monday morning. The CLI now runs on a Native AOT host by default, so commands like help and version queries can run without starting the managed CLI at all, and a warm MSBuild server stays alive between invocations instead of paying startup costs on every dotnet call. Installers on Linux and macOS are smaller, file-based apps can grow across source files with #:include, and dotnet watch gains Aspire app-host integration and crash recovery.

There’s also a new toolchain manager, dotnetup (public preview), for installing and updating SDKs and runtimes in your user account, and a .NET Upgrade canvas that gives you a visual view of a GitHub Copilot upgrade session — assessment findings, dependency compatibility, and progress as the upgrade agent works.

The AI pieces land in the box

If you’ve been watching Microsoft assemble its AI story for .NET, .NET 11 is where the pieces become something you can actually build on. The SDK includes an MCP server template — dotnet new mcpserver scaffolds a working sample tool on the official MCP C# SDK, so you can expose your own functionality to AI applications without installing a separate template package first.

For applications that consume AI services, Microsoft.Extensions.AI provides abstractions like IChatClient and IEmbeddingGenerator that compose with dependency injection, caching, and OpenTelemetry the way .NET developers already work. Microsoft Agent Framework builds on those abstractions with agents that call tools and maintain conversation state, plus workflows that coordinate agents and application code. Blazor gets experimental AI components for streaming chat, tool rendering, and approval flows — still prerelease throughout .NET 11, so treat them as a direction to try and give feedback on, not a stable API.

Web, desktop, and data

ASP.NET Core adds asynchronous validation (a validator can await a database lookup instead of blocking a thread), OpenAPI 3.2 as the default for generated documents, and SignalR authentication refresh without reconnecting. Blazor gets a CacheView component for caching part of a statically rendered page, and interactive server apps can opt into pausing circuits when a browser tab goes inactive.

.NET MAUI makes CoreCLR its default runtime, putting mobile and desktop apps on the same runtime foundation as everything else, and XAML Incremental Hot Reload arrives in preview. Entity Framework Core 11 — which requires .NET 11 — removes unnecessary joins in more scenarios, improves GroupBy translation, and adds experimental SQL Server vector indexes and approximate vector search.

The deadline that matters most: .NET 8 and 9 are done

Buried under the feature list is the item that should drive your planning: .NET 8 and .NET 9 reached end of support on November 10, 2026. No more fixes, security or otherwise. Microsoft’s guidance is to move to .NET 11 for the latest capabilities, or .NET 10 if its LTS lifecycle fits your requirements better — .NET 11 is a Standard Term Support release with two years of support, while .NET 10 remains the supported LTS option.

If you’re still on 8 or 9, the upgrade path Microsoft sketches is straightforward: update global.json if your repo pins the SDK, retarget to net11.0 (or net10.0), update packages and workloads, review the breaking changes, and run your tests under a representative workload. Installing a new SDK alone doesn’t retarget your app — the target framework change is the step people forget.

The ecosystem was ready on day one

JetBrains shipped Rider 2026.3 on November 10, timed to match .NET 11’s general availability, with day-one support for .NET 11 and C# 15 — including the new union types and debugging for the runtime’s new async model — and it brings JetBrains Air, the company’s agent workspace, into Rider. .NET Conf runs through November 13, with product team sessions November 10–11 and community sessions after.

Try it

dotnet new console -n HelloDotnet11 -f net11.0
dotnet run --project HelloDotnet11

Then swap in the union-type example above. .NET 11 isn’t a rewrite-the-world release — it’s a sharpen-the-tools one, with one genuinely new way to model your code and a support clock that just ran out for two versions a lot of us are still running. That’s a good week to upgrade.

The Original Web Geek