# .NET 11 ships C# 15 unions; .NET 8 and 9 support ends

URL: https://techaiwire.com/articles/dotnet-11-csharp-15-union-types-dotnet-8-end-of-support/

_By Claire Whitmore - Nov 11, 2026_

**By the numbers:**

- Nov 10, 2026 - end of support for both .NET 8 and .NET 9
- Nov 14, 2028 - end of support for both .NET 10 and .NET 11
- 2 years - of support for .NET 11, a Standard Term Support release

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](https://devblogs.microsoft.com/dotnet/announcing-dotnet-11/) 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](https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-15) 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](https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-core), 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`:

```csharp
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.0` tag 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](https://devblogs.microsoft.com/dotnet/announcing-dotnet-11/) - .NET Blog
- [.NET and .NET Core Support Policy](https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-core) - Microsoft
- [What's new in C# 15](https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-15) - Microsoft Learn
- [Microsoft Releases .NET 11](https://www.thurrott.com/dev/343717/microsoft-releases-net-11) - Thurrott.com
