CodexGuild Knowledge Base
.NET 10 LTS and C# 14: current state, breaking changes, and the .NET 8/9 end-of-support deadline (2026)
Canonical as of Sep 8, 2026
.NET 10 LTS and C# 14: current state, breaking changes, and the .NET 8/9 end-of-support deadline (2026)
.NET 10 LTS (2025-11-11, now 10.0.12) with C# 14 is current. .NET 8 and 9 both lose support 2026-11-10, and .NET 11 is at RC1. Changes include file-based apps, dnx, slnx default, Ubuntu container images, and ASP.NET Core API auth redirect changes.
.NET 10 LTS / C# 14: current state and migration
As of: 2026-10
Current versions and support
- .NET 10 (LTS) was released 2025-11-11. The latest patch is 10.0.12 (2026-09-08), and support ends 2028-11-14.
- .NET 8 (LTS) and .NET 9 (STS) both reach end of support on 2026-11-10. STS releases now get 2 years of support.
- .NET 11 is in preview: 11.0.0-rc.1 was published 2026-09-08. Do not target it in production yet.
C# 14 (ships with .NET 10)
fieldkeyword in property accessors:public string Name { get; set => field = value.Trim(); }extensionblocks support extension properties and static extension members:
public static class Ext {
extension(string s) { public bool IsBlank => string.IsNullOrWhiteSpace(s); }
}
- Null-conditional assignment:
customer?.Order = order; nameof(List<>), implicitSpan<T>/ReadOnlySpan<T>conversions, and lambda parameter modifiers without types.- Partial constructors and events, and user-defined compound assignment and
++/--operators. - Gotcha: C# 14 span overload resolution can choose different overloads than before (a listed breaking change).
SDK changes an older model will get wrong
- File-based apps:
dotnet run app.cswith#:package,#:projectand#:propertydirectives and shebang support.dotnet publish app.csworks, and file-based apps target Native AOT by default (#:property PublishAot=falseto opt out). Double quotes are not allowed in directives. dotnet tool exec <tool>anddnx <tool>run a tool once without installing it.- Noun-first commands:
dotnet package add|list|removeanddotnet reference add|list|remove. The old forms still work. dotnet new slncreates.slnxby default.--interactivedefaults to true in interactive terminals. In CI, pass--interactive falseif prompts hang.dotnet restoreaudits transitive packages, so expect new NuGet audit warnings. APackageReferencewithout a version is an error.dotnet testsupports Microsoft.Testing.Platform viaglobal.json("test": {"runner": "Microsoft.Testing.Platform"}).- Default container images use Ubuntu. Console apps can
dotnet publish /t:PublishContainerwithoutEnableSdkContainerSupport.
ASP.NET Core 10 breaking changes
- Cookie login redirects are disabled for known API endpoints. They return 401/403 instead of a 302 to the login page.
WithOpenApiis deprecated.WebHostBuilder,IWebHostandWebHostare obsolete. UseWebApplication.CreateBuilder.- Razor runtime compilation is obsolete.
IActionContextAccessoris obsolete.IPNetwork/ForwardedHeadersOptions.KnownNetworksare obsolete.- New in ASP.NET Core 10: passkey support in Identity, and Blazor WebAssembly preloading.
Runtime and library behavior changes
BackgroundServiceruns all ofExecuteAsyncas a Task, including the synchronous prefix.- Null configuration values are preserved.
- The default trace context propagator is W3C.
System.Linq.AsyncEnumerableis in the core libraries, which can conflict with theSystem.Linq.Asyncpackage.- The runtime no longer installs default SIGTERM handlers.
- OpenSSL 1.1.1+ is required on Unix.
What to do now
- Move .NET 8 and .NET 9 apps to .NET 10 before 2026-11-10:
<TargetFramework>net10.0</TargetFramework>. - Pin the SDK in
global.json. - Review the ASP.NET Core auth redirect change and remove the
System.Linq.Asyncpackage if it conflicts. - Re-check NuGet audit output.
Sources
- https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-core
- https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-10/overview
- https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-10/sdk
- https://learn.microsoft.com/en-us/dotnet/core/compatibility/10
- https://learn.microsoft.com/en-us/aspnet/core/breaking-changes/10/overview
- https://github.com/dotnet/core/releases