.NET 11 ships C# 15 unions; .NET 8 and 9 support ends
.NET 11 and C# 15 shipped November 10, the day .NET 8 and 9 lost support. In a hands-on test, a missed union case only warned, then crashed at runtime.
5 min read
Drafted with AI from the sources linked in this article, then fact-checked and edited by Claire Whitmore before publishing. How we work

By the numbers
- end of support for both .NET 8 and .NET 9
- Nov 10, 2026
- end of support for both .NET 10 and .NET 11
- Nov 14, 2028
- of support for .NET 11, a Standard Term Support release
- 2 years
Microsoft released .NET 11 on November 10, 2026, with C# 15 and its new union types. On the same day, .NET 8 and .NET 9 reached the end of their support, according to Microsoft's support policy page. Microsoft's .NET is a free, open-source platform for building apps, and C# is its main language. Apps still running on .NET 8 or 9 no longer get security fixes from Microsoft.
The .NET Blog announcement came on the first day of .NET Conf 2026, which runs November 10 to 13. Thurrott.com notes that .NET 11 is a Standard Term Support (STS) release, supported for two years. Long Term Support (LTS) releases such as .NET 10 get three years.
What is in .NET 11 and C# 15
The headline is the language. C# 15 is the default for any project that targets .NET 11, so no extra setting is needed. Microsoft's "What's new in C# 15" page lists these features:
| Feature | What it does | Needs a preview flag |
|---|---|---|
| Union types | One type that holds exactly one of a fixed list of types | No |
| Closed hierarchies | A base class whose subclasses the compiler knows in full | No |
| Collection expression arguments | Pass constructor settings, such as a capacity, inside [...] | No |
| Extension indexers | Add [index] access to a type you do not own | No |
Labeled break and continue | Jump out of an outer loop from an inner one | No |
| Static interface members on older runtimes | Plain static methods in interfaces, without newer runtime support | No |
| Memory safety rules | New rules for unsafe pointer code | Yes |
A union is useful when a value can be one of several shapes, such as a payment that is a card, a bank transfer or a voucher. The compiler then checks that code handles every shape.
The rest of the release is tooling and libraries. The .NET Blog lists a native command-line host and a warm MSBuild server for faster builds. It also lists OpenAPI 3.2 support in ASP.NET Core and AI building blocks with MCP, the Model Context Protocol that links AI models to tools. The app framework for phones and desktops, .NET MAUI, now runs on CoreCLR by default. Microsoft cites "hundreds of runtime optimizations" but gives no figures in the announcement.
Which .NET versions are still supported
The table below comes from Microsoft's support policy page, last updated November 10, 2026. The page says even-numbered releases are LTS and odd-numbered ones are STS.
| Version | Type | Released | Latest patch | End of support |
|---|---|---|---|---|
| .NET 11 | STS | November 10, 2026 | 11.0.0 | November 14, 2028 |
| .NET 10 | LTS | November 11, 2025 | 10.0.15 | November 14, 2028 |
| .NET 9 | STS | November 12, 2024 | 9.0.23 | November 10, 2026 |
| .NET 8 | LTS | November 14, 2023 | 8.0.34 | November 10, 2026 |
One detail stands out. Both .NET 11 and .NET 10 lose support on the same day, November 14, 2028. So choosing the STS release no longer means a shorter life than the LTS one. Microsoft's policy also says only the latest patch of a version is supported, and the last six months of each version get security fixes only.
Tech AI Wire test: C# 15 unions in the .NET 11 SDK
In a Tech AI Wire test on macOS 26, the official mcr.microsoft.com/dotnet/sdk:11.0 container image (Ubuntu 26.04.1, arm64) reported SDK 11.0.100. A new console project targeted net11.0 with no language setting. Microsoft's own C# 15 examples then compiled and ran as written, plus a small grid added for the labeled break:
Pet pet = new Dog("Rex");
string name = pet switch
{
Dog d => d.Name,
Cat c => c.Name,
Bird b => b.Name,
};
public union Pet(Cat, Dog, Bird);
The first run of dotnet run, build included, took 2.6 seconds. The other features worked too. A HashSet built with a case-insensitive comparer kept one of "Hello", "HELLO" and "hello", and a labeled break left both loops at once.
Next, the test deleted the Bird line from the switch. The build still succeeded. It printed warning CS8509: "The switch expression does not handle all possible values of its input type (it is not exhaustive). For example, the pattern 'Bird' is not covered." When the program later got a Bird, it crashed with a SwitchExpressionException and exit code 134.
The fix took one setting. With -p:WarningsAsErrors=CS8509, the same build failed with error CS8509 and exit code 1. So the safety check is there, but by default it is only a warning.
What this means for developers
Two things need attention this week: old versions and new habits.
- Move off .NET 8 and .NET 9. Both stopped getting patches on November 10. The last versions Microsoft lists are 8.0.34 and 9.0.23. Any security flaw found from now on stays open in them.
- Pick 10 or 11 on features, not support length. Both are supported until November 14, 2028. .NET 11 gets you C# 15; .NET 10 is the smaller jump for a team on .NET 8.
- Make CS8509 an error before you use unions. Add
<WarningsAsErrors>CS8509</WarningsAsErrors>to the project file, the same setting that made the test build fail. Without it, a new case added to a union can compile cleanly and fail only in production. - Leave the memory safety rules alone for now. They still need a preview flag, so they may change before a later release.
- Update container builds. In the test, the
sdk:11.0tag pulled SDK 11.0.100. Pin the image by its digest in your Dockerfiles, so each build uses the SDK you tested.
Teams on .NET 10 have no deadline. They can try C# 15 in a branch and move when the libraries they rely on support .NET 11.
Sources
- Announcing .NET 11 - .NET Blog
- .NET and .NET Core Support Policy - Microsoft
- What's new in C# 15 - Microsoft Learn
- Microsoft Releases .NET 11 - Thurrott.com
Related articles
C++26 fails ISO ballot over Contracts, tested in GCC 16
C++26 failed its ISO ballot over Contracts. A Tech AI Wire test ran all four contract modes in GCC 16.2, and one printed 0 for 10 / 0 with no warning.

CPython's JIT set for removal after PEP 836 withdrawn
PEP 836's authors withdrew it on October 19, 2026, so CPython's experimental JIT compiler is now expected to be removed from the main branch.

TypeScript 7.1 Beta adds a new API and content mappers
TypeScript 7.1 Beta brings back a programmatic API for tools stuck on 6.0, adds content mappers for .vue files and type-checks up to 1.9x faster than 7.0.
The weekly digest
One email every Friday with the week's top stories from all six desks: AI, dev tools, coding, the tech industry, startups and what's next. Free, no spam.