.NET 9 STS End-of-Life: Your Upgrade Path to .NET 10 LTS
Microsoft published the final security patch for .NET 9 on May 12, 2026. If you're still running ASP.NET Core 9 applications, you're now on an unsupported runtime — same situation .NET 7 owners faced in May 2024. Here's what just changed for your application, how the .NET 9 STS lifecycle differs from LTS, and the clean upgrade path to .NET 10 LTS.
What just happened on May 12, 2026
.NET 9 was released in November 2024 as a Standard Term Support (STS) release. STS releases get 18 months of official support from Microsoft — substantially shorter than the 36-month LTS window. .NET 9's STS window closed on May 12, 2026, exactly 18 months after release.
From that date forward:
No more security patches. Any CVE disclosed against .NET 9 after May 2026 will not be fixed by Microsoft.
No more runtime bug fixes. Issues in the .NET 9 garbage collector, JIT, ASP.NET Core 9 HTTP stack, or Entity Framework Core 9 stop receiving backports.
No more package compatibility commitment. Library authors are free to drop the net9.0 target framework in new releases.
Microsoft support escalation closes. If you're on a Premier contract, the answer to a .NET 9 issue is "upgrade to .NET 10 LTS."
This is identical to the .NET 7 EOL story from 2024. The runtime keeps working; the risk surface grows monthly; remediation options for new issues are zero.
Why .NET 9 had an 18-month window in the first place
Microsoft alternates LTS and STS releases on a roughly yearly cadence:
ReleaseTypeReleasedEnd of support
.NET 6LTSNov 2021Nov 2024 (already EOL)
.NET 7STSNov 2022May 2024 (already EOL)
.NET 8LTSNov 2023Nov 2026
.NET 9STSNov 2024May 2026 (just EOL'd)
.NET 10LTSNov 2025Nov 2028
STS releases let Microsoft ship language and runtime experiments earlier — some .NET 9 features (Native AOT improvements, Enhanced Minimal APIs, OpenAPI document customization) graduated into .NET 10 LTS. Teams that adopt STS are essentially trial-running features that will land in the next LTS, with the explicit deal that they upgrade within 18 months when STS support ends.
If you chose .NET 9 STS in 2024 or 2025, this was always part of the contract. The upgrade is now due.
.NET 9 → .NET 10 LTS is the easiest .NET migration there is
The good news: .NET 9 → .NET 10 is the smallest gap between any two .NET versions. .NET 10 was deliberately designed as a forward-compatible LTS for .NET 9 STS code. For most applications, the upgrade is:
Change <TargetFramework>net9.0</TargetFramework> to <TargetFramework>net10.0</TargetFramework>
Run dotnet restore
Update NuGet packages that have new net10.0 builds (most major packages already do)
Build, test, deploy
That's it. Microsoft published the official ASP.NET Core migration guide with the breaking-changes list — for most apps it fits on a single screen.
What you gain by upgrading
3-year LTS support through November 2028 — vs zero remaining support on .NET 9
C# 14 — collection expression improvements, ref struct enhancements, primary constructors on classes
Microsoft.Extensions.AI in the box — unified abstraction for AI/LLM integrations
Post-quantum cryptography support — ML-DSA and ML-KEM algorithms for forward-secure key exchange
Entity Framework Core 10 — native vector search, hybrid full-text/semantic search, native JSON column types
OpenAPI 3.1 support in ASP.NET Core minimal APIs
Improved Blazor — passkey support for Identity, Blazor unified render mode refinements
The actual upgrade walkthrough
Step 1 — install the .NET Upgrade Assistant
dotnet tool install -g upgrade-assistant
Or use the Visual Studio extension. The tool inspects your project files, identifies the upgrade path, and produces a step-by-step plan with rollback markers at each stage.
Step 2 — update the TargetFramework
In every .csproj file, change:
<TargetFramework>net9.0</TargetFramework>
to:
<TargetFramework>net10.0</TargetFramework>
Then run dotnet restore from the solution root.
Step 3 — upgrade NuGet packages
dotnet list package --outdated
For each package, run dotnet add package PackageName to take the latest compatible version. Most major libraries (Microsoft.AspNetCore.*, Entity Framework Core, Serilog, AutoMapper, MediatR) shipped net10.0 builds within weeks of .NET 10's November 2025 release — six months on, the long tail has caught up. You shouldn't run into "no compatible version" errors on any popular package.
Step 4 — update Entity Framework Core
If your app uses Entity Framework Core 9, upgrade the EF Core packages to version 10:
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Tools
EF Core 10 introduces vector search and a refined JSON column API, but is fully backward-compatible with EF Core 9 query patterns. Existing migrations still apply unchanged against the same SQL Server 2022 schema. Run dotnet ef migrations script --idempotent --output check.sql to confirm.
Step 5 — address compiler warnings
Build the solution. The compiler flags any APIs that were obsoleted in .NET 9 and removed in .NET 10. For .NET 9 → .NET 10, expect roughly 0-5 warnings on a typical small-to-medium codebase. Most are trivial (renamed properties, attribute namespacing).
Step 6 — test locally and in staging
Run dotnet test and exercise the routes you care about. If anything breaks, the .NET 10 error messages are dramatically clearer than .NET 9's. Deploy to a staging subdomain before promoting to production — on Adaptive Web Hosting you can use a second subdomain on the same plan for this.
Step 7 — deploy
Publish to your hosting plan via Web Deploy, MSDeploy, GitHub Actions with the IIS deploy task, or FTP. On Adaptive Web Hosting plans, the .NET 10 LTS runtime is already pre-installed alongside .NET 9 — no plan change needed, no coordination with us required.
Why .NET 9 → .NET 8 is the wrong direction
Some teams considering an .NET 9 upgrade ask whether downgrading to .NET 8 LTS makes sense. The answer is almost always no:
You'd lose features your code may already depend on (Native AOT improvements, Enhanced Minimal APIs)
.NET 8 LTS expires in November 2026 — only 18 months of support left, vs 30 months for .NET 10
The migration work is similar in both directions, so the math favours .NET 10's longer runway
If your team explicitly wants the most mature library ecosystem and is comfortable upgrading again in 2026, .NET 8 LTS is a viable target. Otherwise, .NET 10 LTS is the strategic choice.
How Adaptive Web Hosting supports both .NET 9 and .NET 10 today
Every ASP.NET Core hosting plan on Adaptive includes:
.NET 10 LTS runtime pre-installed
.NET 9 runtime still available for transitional workloads (you can keep running .NET 9 while you plan the upgrade)
.NET 8 LTS also pre-installed for side-by-side hosting
Real Microsoft SQL Server 2022 (not Express) with full Entity Framework Core 10 support
Dedicated IIS Application Pools so the upgrade doesn't affect neighbour tenants
Plesk for Windows control panel with deployment automation and SSL management
30-day money-back guarantee on every plan
The hosting layer isn't a bottleneck for the upgrade. The work happens in your application code, then it's a re-publish.
Frequently asked questions
How urgent is this really? My .NET 9 app still works fine.
Operationally yes, the runtime keeps running. Strategically, the longer you stay past EOL, the larger your unpatched security surface and the harder library compatibility gets. We'd target completing the upgrade within 3 months of the EOL date (by August 2026). Beyond 6 months, you'll start seeing package updates drop net9.0 targets, forcing you to pin versions.
Should I jump to .NET 11 when it ships?
.NET 11 is the next STS release (expected November 2026). Skipping LTS releases in favour of STS commits you to the same 18-month upgrade treadmill .NET 9 just put you on. For most production workloads, LTS-only is the calmer choice. Adopt STS releases only if you specifically need features they introduce that aren't backported to the previous LTS.
Is .NET 10 LTS production-ready six months in?
Yes. .NET 10 LTS shipped in November 2025 and has had 6 months of production deployments at this point. Microsoft's own apps run on it. The library ecosystem is fully caught up. Treat it the same way you'd have treated .NET 8 LTS in May 2024.
Will my Blazor Server app break on .NET 10?
Almost certainly not. Blazor Server's SignalR transport, circuit lifecycle, and render-mode APIs are largely unchanged between .NET 9 and .NET 10. The unified render modes from .NET 8 carry through cleanly. Test the SignalR reconnection behaviour in staging before promoting, but expect a clean transition. See our complete Blazor hosting guide for the architectural picture on .NET 10.
What about my Entity Framework Core 9 code?
EF Core 9 to EF Core 10 is a backward-compatible upgrade. Existing DbContext patterns, query syntax, and migrations work unchanged. EF Core 10 adds vector search and refined JSON column APIs — opt-in features, not breaking changes. The included SQL Server 2022 schema doesn't change.
Can I keep running .NET 9 while I migrate?
Yes — on Adaptive Web Hosting plans, the .NET 9 runtime remains installed alongside .NET 10 LTS. Your existing app keeps running. When your upgraded build is ready, you redeploy targeting net10.0 and the IIS app pool picks up the new runtime on next recycle.
What if my dependencies aren't ready for .NET 10 yet?
By May 2026, virtually every actively-maintained .NET library targets net10.0. If you hit a stubborn dependency that hasn't shipped a net10.0 build, options are: pin to its last net9.0-compatible version with a feature freeze, find an actively-maintained fork, replace the dependency, or open a GitHub issue. The case where you genuinely can't move forward is now rare.
Bottom line
.NET 9 STS is past end-of-life. The runtime works; the risk grows. Microsoft's official tooling makes the upgrade to .NET 10 LTS a small set of edits to your project file plus a package restore — the smallest gap between any two .NET versions. On Adaptive Web Hosting, every plan already runs .NET 10 LTS alongside the .NET 9 runtime, so the hosting layer isn't a bottleneck.
Target a complete upgrade within 3 months of the EOL date. Every plan includes a 30-day money-back guarantee. View hosting plans or talk to an ASP.NET expert.