Microsoft 12031 Published by

Microsoft has officially released .NET 11 Release Candidate 1, unlocking production go-live status for developers eager to deploy the upcoming LTS branch. C# 15 is now the default language version, finalizing union types, closed class hierarchies, and async support within unsafe contexts. The runtime ships with in-process crash reporting for Unix systems and leverages hardware FP16 instructions for faster System.Half calculations. Alongside these core updates, the SDK introduces mobile app testing via dotnet test, reproducible container publishing, and Native AOT caching for single-file programs.





Microsoft Ships .NET 11 Release Candidate 1, Unlocks Production Go-Live

The first release candidate of the upcoming .NET 11 LTS branch is officially live, and the go-live license now applies to this build. Microsoft also shipped matching updates for Visual Studio 2026 Insiders and VS Code with the C# Dev Kit.

If you've been waiting on the sidelines, the compiler team clearly wants you to take a closer look. C# 15 is now the default language version for .NET 11 projects, which means union types and closed class hierarchies are no longer behind a preview flag. You also get in-process crash reporting on Unix and hardware-accelerated System.Half operations. The RC dropped on September 8, 2026, so you have a few months before the final LTS ships in November.

Announcing .NET 11 Release Candidate 1 - .NET Blog

.NET 11 Release Candidate 1 is available with improvements across libraries, runtime, SDK, MSBuild, NuGet, C#, F#, ASP.NET Core, .NET MAUI, and Windows Forms.

Announcing .NET 11 Release Candidate 1 - .NET Blog

C# 15 Goes Default

C# 15 is no longer behind an opt-in flag. Projects targeting .NET 11 will use it automatically. The feature set is already familiar to anyone who tracked the six previous previews. Union types let you declare public union Result(Success, Failure) and match against them with switch expressions. Closed class hierarchies give you sealed inheritance chains that the analyzer can fully reason about. Labeled break and continue finally tame nested loops. Extension indexers and collection expression arguments round out the list.

The compiler API is also locked down. ITypeSymbol.UnionCaseTypes gives analyzers direct access to union case data. The Roslyn team locked the language version string to CSharp15, which tells you they're done tweaking it.

Still in preview mode, though. The new memory-safety framework now lets you await inside unsafe blocks. That is a welcome change for async I/O that needs raw pointers. You can also slap safe on generated declarations like LibraryImport. On the flip side, putting unsafe on delegates, static constructors, or destructors is now a hard error. The compiler is clearly pushing you toward explicit context.

Runtime Gains Unix Crash Reports and FP16

The new in-process crash reporter works on Linux and macOS now. You toggle it with DOTNET_EnableCrashReport=1 or the Only variant if you want to skip the createdump fallback. Community contributions actually extended this to s390x and a handful of other Unix targets. The team clearly spent time making cross-platform debugging less painful.

System.Half now uses hardware FP16 instructions when your CPU supports them. x64 gets AVX10.1 and F16C. Arm64 gets the optional FP16 ISA. No app changes required. The ABI stays the same, which keeps your existing binaries happy.

Libraries and Tooling

TLS is getting a caller-driven state machine, though it's marked experimental for now. TlsBufferSession and TlsSocketSession hand you back TlsOperationStatus values that tell you exactly how much input you consumed and what output you need. If you're building a custom transport library, you'll probably want to wait for RTM. The APIs will shift. Otherwise, you might find yourself refactoring a month from now.

JSON serialization finally handles BFloat16, Decimal32, Decimal64, and Decimal128. You can also opt individual hierarchies into closed-type polymorphism without touching global settings. The structural classifier even lets you match union types by property names.

On the SDK side, dotnet test now runs on Android, iOS, macOS, and Mac Catalyst. You just point it at a connected device or simulator. Container publishing respects SOURCE_DATE_EPOCH for reproducible digests. File-based programs using Native AOT actually cache their outputs now, so dotnet run app.cs skips the rebuild if the file hasn't changed.

Keep in mind that the Configuration environment variable now feeds into --configuration by default. If your scripts blindly set an ambient Configuration variable, they might start building in Release mode without you noticing. Pass the flag explicitly or unset the variable.

Numeric conversions between decimal and binary floats now round correctly to the nearest representable value. This change dates back to Preview 7, but it's worth calling out again. Rebuilt binaries can produce different results. Stick to decimal literals if you need exact decimal math.

What Comes Next

Microsoft says the ongoing memory and storage crunch kept the team focused on shipping a stable foundation rather than chasing bleeding-edge features. The RC is where most of that work lands. Windows devs should grab Visual Studio 2026 Insiders, while everyone else can stick with VS Code and the C# Dev Kit. The full release notes are up on GitHub, and the team hosts a weekly community standup on Thursdays if you want to hear about what comes next.