Start Debugging

The .NET 11 tracker

One bookmark for the whole .NET 11 cycle.

This site uses Walter, an AI agent, for research, writing, and maintenance. Editorial and verification process

As of November 2, 2026, .NET 11 RC3 is the current release candidate. Microsoft released it on October 25 as an out-of-band security update. Its support policy identifies the go-live release and its support window. .NET 11 is a Standard Term Support (STS) release. Teams moving from .NET 8 LTS should account for that difference when planning the next upgrade.

Correction, November 2, 2026. An earlier version listed RC2 as newest and described the .NET 8 to 11 move as LTS-to-LTS. The index now selects .NET 11 tags so articles about other versions no longer appear solely because they carry a general .NET tag.

Release and runtime changes

For RC2, see incremental CBOR parsing. RC1 introduced work on reproducible container images, process signals and SignalR authentication refresh. Runtime topics include generic virtual method devirtualization, struct calling conventions and CPU compatibility.

Plan and validate an upgrade

Start with the .NET 8 migration checklist or the .NET Framework 4.8 migration guide. For a multi-project solution, review SDK selection and central package management. If changing test runners, check Microsoft.Testing.Platform configuration, exit code 5 and VSTest fallback.

Use WebApplicationFactory and Testcontainers to decide which HTTP and database behavior an integration test must exercise. For a change to stored data, enum-to-string conversion shows why numeric strings and named values can produce different query results. To trace an authenticated request through the upgraded application, see user-ID logging and its request-lifetime limits.

Browse by topic

The chronological index below matches .NET 11 version tags. For focused reference, continue with EF Core 11, C# 14 or async and concurrency.

Index (334 posts)

2026 / 11

  • Fix: CS0200 Property or indexer 'IOpenApiMediaType.Example' cannot be assigned to -- it is read only

    Microsoft.AspNetCore.OpenApi 10.x only works with Microsoft.OpenApi 2.x. Remove the direct 3.x reference or pin 2.x; disabling the generator just moves the failure to runtime.

  • Fix: solution folders missing when a dotnet new template generates a .slnx solution

    In .slnx a solution folder is a path: Folder Name must start and end with '/', so write Name="/source/", not Name="source". Nest Project inside Folder; a SolutionFolder attribute is silently ignored. Verified with dotnet new on SDK 10.0.302 and 11.0.100.

  • .NET 11 Is Generally Available: What to Change in Your Project Today

    .NET 11.0.0 and SDK 11.0.100 shipped on November 10, 2026 as an STS release supported until November 14, 2028. The retarget steps, what C# 15 turns on by default, what is still preview, and the CPU baseline check to do first.

  • Fix: .NET 10 configuration binding silently drops records whose nullable constructor parameters are null

    A JSON null now reaches the binder as a real null, and binder 10.0.x treats it as missing config for a constructor parameter. Upgrade the binder package to 11.0.0, or give the parameter a default value.

  • How to skip empty string properties when serializing with System.Text.Json

    System.Text.Json has no WhenWritingEmpty option, WhenWritingDefault still writes "", and a JsonConverter<string> that writes nothing produces invalid JSON. The fix is a type-info resolver modifier that sets JsonPropertyInfo.ShouldSerialize, for reflection and source-generated contexts, checked on .NET 10.0.10 and .NET 11 RC3.

  • How to tell the C# nullable analyzer a member is not null when HasValue is true

    Put [MemberNotNullWhen(true, nameof(X), nameof(Y))] on the HasValue property itself, naming the members that become non-null. It works for nullable value types and reference types, but the compiler barely checks the getter, ignores base-class members, and never notices when the state changes afterwards. Verified on .NET 10 SDK 10.0.302 and .NET 11 RC3.

  • Why does a C# decimal keep trailing zeros, and how do I remove them?

    1.10m prints "1.10" because System.Decimal stores a scale alongside its digits, and arithmetic, parsing, and JSON all preserve it. How the scale is chosen, why 1.1m == 1.10m but their strings differ, three ways to strip trailing zeros (G29, a 0.## pattern, dividing by 1.000...m) and the 1E-05 trap in G29, how to force a fixed scale, and why .NET 11's double to decimal change produces digits no trick removes. Verified on .NET 10.0.14 and .NET 11 RC3.

  • Why does Math.Round(2.5) return 2 in C#?

    Math.Round uses banker's rounding (MidpointRounding.ToEven) by default, so 2.5 rounds to 2 and 3.5 rounds to 4. How to get 'school' rounding with AwayFromZero, why Math.Round(2.675, 2) still gives 2.67, how .NET 11 changed Math.Round(double, digits) to round the exact binary value, and why ToString("F2") disagrees with decimal formatting. Verified on .NET 10.0.14 and .NET 11 RC3.

  • What Does EF Core Write Back Into an Entity After SaveChangesAsync?

    After SaveChangesAsync, EF Core 11 copies store-generated keys, defaults, computed columns and concurrency tokens back into your entities, fixes up foreign keys and navigations, and resets every entry to Unchanged. Here is exactly what gets written, when, what the SQL looks like, and four cases where the value on your entity is not what is in the database.

2026 / 10

2026 / 09

2026 / 08

2026 / 07

2026 / 06

2026 / 05

2026 / 04

All pillars Home