.NET 8 and .NET 9 support ends on 10 November 2026: how to upgrade to .NET 10
Microsoft stops security updates for .NET 8 and .NET 9 on 10 November 2026. What that means, what breaks and how to move to .NET 10 LTS.
Vlado Pandžić · Founder · Senior .NET architect
Published · 4 min read
Microsoft ends support for .NET 8 and .NET 9 on 10 November 2026. From that day neither version gets security updates. The upgrade target is .NET 10, a long-term support (LTS) release supported until November 2028. For most business applications the upgrade takes days, not months, if you know where to look.
Which versions are affected
| Version | Support | End of support |
|---|---|---|
| .NET 8 | LTS | 10 November 2026 |
| .NET 9 | STS | 10 November 2026 |
| .NET 10 | LTS | November 2028 |
.NET 9 ends on the same day as .NET 8 because standard-term releases are now supported for 24 months instead of 18.
What end of support means
Applications on .NET 8 and .NET 9 keep running after 10 November. What stops:
- Security updates. Vulnerabilities found after that date stay open in production.
- Technical support from Microsoft.
- A clean audit. Security scanners flag unsupported runtimes, and that shows up in customer security questionnaires and certifications.
Go straight from .NET 8 to .NET 10
There is no need to stop at .NET 9. Both .NET 8 and .NET 10 are LTS releases, and you can move directly. Just read the breaking changes for both .NET 9 and .NET 10.
Upgrade checklist
-
Install the .NET 10 SDK and a supported IDE. Targeting
net10.0requires Visual Studio 2026; Visual Studio 2022 does not support it. JetBrains Rider and VS Code work too. -
Update
global.jsonif the solution pins an SDK version. -
Change the target framework in every project, or once in
Directory.Build.props:<PropertyGroup> <TargetFramework>net10.0</TargetFramework> </PropertyGroup> -
Update the Microsoft packages (ASP.NET Core, EF Core,
Microsoft.Extensions.*) to 10.x, then check that every third-party package has a version that supports .NET 10. -
Build and fix the warnings. Obsolete APIs appear as warnings. If warnings are treated as errors, most of the work is here.
-
Run the tests, and check by hand what they don’t cover: startup, authentication, background jobs and data access.
-
Update the pipeline and hosting: CI build images, Docker base images (
mcr.microsoft.com/dotnet/aspnet:10.0), the ASP.NET Core Hosting Bundle on IIS, or the runtime stack on Azure App Service. -
Deploy to a test environment first, and watch the database for the first hours after the production release (see EF Core below).
Breaking changes to check first
Microsoft’s lists are long. These are the changes that most often affect business web applications.
SDK and build
dotnet restorenow audits transitive packages in projects that target .NET 10. Known vulnerabilities in the dependencies of your dependencies show up as warnings NU1901–NU1904, and if warnings are treated as errors, the build stops. Find the source withdotnet nuget whyand update the package rather than hiding the warning.
ASP.NET Core 10
- Cookie login redirects are disabled for known API endpoints. Instead of redirecting to the login page, API endpoints now return 401 or 403. Better for APIs, but check frontends that relied on the redirect.
WebHostBuilder,IWebHostandWebHostare obsolete. AProgram.csthat dates back to ASP.NET Core 2 or 3 should move to the minimal hosting model.- Razor runtime compilation and
IActionContextAccessorare obsolete.
Entity Framework Core 10
- Collections in queries such as
ids.Contains(x.Id)are now translated into multiple SQL parameters instead of a single JSON parameter. Usually faster, but measure queries that pass long lists. - SQL parameter names are simpler (
@cityinstead of@__city_0). Almost every cached query plan is recompiled after deployment, so expect a short spike in database CPU. - On Azure SQL (
UseAzureSql), EF now maps JSON to the newjsoncolumn type, and the first migration after the upgrade alters existing JSON columns.
Runtime and containers
- Default container images use Ubuntu 24.04 instead of Debian, and Debian images are no longer published. Check Dockerfiles that install system packages.
BackgroundServiceruns all ofExecuteAsyncas a task, so code before the firstawaitno longer blocks application startup.MailAddressrejects consecutive dots and System.Text.Json checks for conflicting property names. Small changes that surface as validation or serialization errors.
How long it takes
Rough ranges for a solution that has tests:
- a single API or service: a few hours to a day
- a typical business application with a database and a frontend: 2 to 5 days
- a large solution with many projects, old dependencies or a custom build: 1 to 3 weeks
The framework itself is rarely the slow part. Third-party packages without a .NET 10 version and missing tests are.
Still on .NET Framework?
Then 10 November doesn’t apply to you, but a bigger decision does. .NET Framework 4.8 still gets security fixes, but no new features, and ASP.NET Web Forms has no upgrade path to modern .NET. This is how we move Web Forms to Blazor, screen by screen, while the old application keeps running.
Sources
- .NET 8 and .NET 9 will reach End of Support on November 10, 2026, .NET Blog
- Breaking changes in .NET 10, Microsoft Learn
- Breaking changes in ASP.NET Core 10, Microsoft Learn
- Breaking changes in EF Core 10, Microsoft Learn
- Targeting .NET 10 in Visual Studio 2022 is not supported, dotnet/sdk on GitHub