.NET 11 Released: C# 15, ASP.NET Core 11, EF Core and AI

Microsoft released .NET 11 on November 10, 2026. It brings C# 15, asynchronous validation for ASP.NET Core, OpenAPI 3.2 generation, EF Core 11 query improvements and a faster-starting command-line toolchain. .NET 11 is a two-year Standard Term Support release. Teams on .NET 10 LTS can keep applying security updates while they test features that would justify a migration.

Layered compiler and runtime blocks illustrating the .NET 11 release

.NET 10 versus .NET 11 at a glance

Area .NET 10 baseline What .NET 11 adds
Support Long Term Support Two years of STS servicing, through November 14, 2028
C# C# 14 is the default C# 15 adds unions, closed hierarchies, collection expression arguments, extension indexers and labeled loop control
ASP.NET Core Minimal API validation and OpenAPI 3.1 support Async validation in supported paths and OpenAPI 3.2 by default
EF Core EF Core 10, with provider-specific vector capabilities More query translations and experimental SQL Server vector indexes and approximate search
SDK Existing CLI and build server infrastructure Native AOT CLI host and warm MSBuild server enabled by default
AI MEAI and MCP libraries available as packages An SDK MCP server template and new experimental Blazor AI components

Sources include the Microsoft release announcement and versioned release notes.

What C# 15 changes in everyday code

A union names a fixed set of case types. Use it when a method can return distinct outcomes and you want the compiler to check that callers handle them. Here a shipping quote can succeed or explain that delivery is unavailable. Adding a new case to the declaration means revisiting switch expressions that assumed only two outcomes.

QuoteOutcome result = new DeliveryUnavailable("Unsupported destination");
Console.WriteLine(result switch
{
    DeliveryQuote quote => $"Delivery costs {quote.Amount:0.00} {quote.Currency}",
    DeliveryUnavailable unavailable => unavailable.Reason
});

public sealed record DeliveryQuote(decimal Amount, string Currency);
public sealed record DeliveryUnavailable(string Reason);
public union QuoteOutcome(DeliveryQuote, DeliveryUnavailable);

A closed hierarchy is useful when the case types already share a base class and belong to an inheritance model you control. A closed class limits direct derivation to its own assembly. Collection expression arguments let callers supply options such as a case-insensitive comparer alongside collection elements. Extension indexers add indexed access to types through extensions. Labeled break and continue clarify which enclosing loop a nested branch should affect. See the C# 15 documentation.

What changes for ASP.NET Core APIs?

Minimal APIs and Blazor forms can use asynchronous DataAnnotations validation for rules that depend on I/O. In a registration flow, a check can await a repository query. Keep the database uniqueness constraint too, because two concurrent requests can both pass a preflight check before either writes.

ASP.NET Core can serialize C# unions in supported JSON request and response bodies and describe their alternatives in OpenAPI. That support applies to JSON, with a classifier needed when cases share the same shape. If your public API already has a stable error contract, compare the generated document before introducing union types at the HTTP boundary.

OpenAPI 3.2 is the default and can describe payloads for individual server-sent events. Regenerate a client in staging and compare its output against the existing client. If a tool only accepts an earlier document version, select a compatible version explicitly. SignalR can refresh authentication on an existing connection. Blazor adds static SSR subtree caching with CacheView, better form validation, and opt-in circuit pausing for inactive tabs. For cached markup, verify that tenant and user-specific content cannot be reused across requests. See ASP.NET Core 11 changes.

FullJoin retains unmatched records from both sequences. For a reconciliation job, that lets a single result identify both orders without payments and payments without matching orders. EF Core 11 can translate it on relational providers that support it. It also improves some GroupBy translations and removes unnecessary joins in more scenarios. Inspect generated SQL and test with your actual provider before changing a busy query.

EF Core 11 requires .NET 11. Its SQL Server vector index and approximate search integration is experimental. Test exact and approximate queries against a reference set, then inspect recall and latency for the workloads you would deploy. Check database support and provider compatibility before enabling the feature. EF Core 11 release notes.

Runtime, libraries, MAUI and AI tools

The Native AOT CLI host can serve some commands without starting the managed CLI. This is an SDK change. Native AOT deployment of your application remains a separate publishing decision. MSBuild can reuse a warm server between commands. The JIT removes more redundant checks and improves some dispatch paths. Runtime Async is still preview, so benchmark separately if you opt into it.

System.Text.Json supports C# unions, F# discriminated unions with documented limits, and JSON Lines output from asynchronous sequences. The compression libraries add Zstandard. Test interoperability with every receiver before changing a wire format or stored artifact. .NET MAUI moves to CoreCLR by default and improves XAML iteration and native controls. Retest device-specific startup, packaging and dependencies after moving a MAUI app.

The SDK now ships an MCP server template. Microsoft.Extensions.AI remains available as NuGet abstractions such as IChatClient, and Microsoft Agent Framework builds agents and workflows on those abstractions. The experimental Blazor AI components and prerelease AG-UI hosting integration are evaluation candidates. Existing MEAI integrations can evolve on their current supported target. Read the ASP.NET PB Microsoft Agent Framework guide.

Inventory SDK and dependencies. Build and compare API contracts. Test database and runtime behavior. Canary deployment with rollback.
Evaluate a .NET 11 upgrade.

How to evaluate an upgrade

  1. Install the .NET 11 SDK alongside .NET 10 from the official download page. Verify the supported operating systems and architectures for development and production.
  2. In a separate branch, check dotnet --list-sdks, pin the chosen SDK in global.json and change the target framework to net11.0.
  3. Restore with compatible dependencies. Include the EF provider, analyzers, test runner and code generators in the review.
  4. Compare OpenAPI and JSON output. Exercise async validation, cancellation, database queries and authentication in integration tests.
  5. Deploy one staging instance or container. Track startup, request latency, memory and error rates using the same workload on both builds. Keep the known-good image available for rollback.

FAQs

Is .NET 11 LTS? It is STS with two years of support. .NET 10 remains an LTS option.

Does the SDK’s AOT host make my API a Native AOT app? The host runs parts of the SDK. Application deployment mode is configured separately.

Should a .NET 10 team migrate right away? Choose a concrete reason to move, such as a language feature or tooling improvement, and verify your deployment stack first. Continue servicing .NET 10 while you evaluate.

Verification. The C# example compiled with .NET SDK 11.0.100 and printed Unsupported destination for the sample input.

Comments