.NET 9 and .NET 8 Reach End of Support on the Same Day: November 10, 2026
Microsoft moved Standard Term Support from 18 to 24 months, so .NET 9 now retires with .NET 8 on November 10, 2026. Here is why, and how to upgrade to .NET 10.

.NET 9 reaches end of support on November 10, 2026. So does .NET 8. That is less than three weeks away. .NET 8 is a Long Term Support (LTS) release that shipped November 14, 2023. .NET 9 is a Standard Term Support (STS) release that shipped November 12, 2024, a full year later. They are both retired on the same day, and that is not a typo. The supported version after November 10 is .NET 10, an LTS release supported until November 14, 2028.
What ends for .NET 8 and .NET 9 on November 10, 2026?
Servicing. Microsoft stops providing "servicing updates, security fixes, or technical support" for .NET 8 and .NET 9, per the announcement from Rahul Bhandari on the .NET Blog.
Your applications keep running. Nothing uninstalls itself. The runtimes, SDKs, and container images stay downloadable, they just stop getting fixed.
November 10 is also a Patch Tuesday. Microsoft says .NET 8 and .NET 9 "may each receive one final update on that day" if there is a known critical issue. After that, every new CVE affecting the runtime, ASP.NET Core, or the base class libraries is a CVE you own.
The latest patches as of this post are 8.0.32 and 9.0.21, both released October 13, 2026. If you are not on those, you are already behind before the deadline arrives.
There is also a tooling side effect. A future Visual Studio 2022 servicing update will mark the .NET 8 and .NET 9 components as out of support, and Visual Studio offers to remove out-of-support components during updates. Check that setting on your build agents before it surprises you.
Why does .NET 9 end on the same day as .NET 8?
Because Microsoft changed the STS lifecycle partway through .NET 9's life.
Under the old policy, STS releases got 18 months of support, which worked out to six months after the next release shipped. .NET 9 was scheduled to reach end of support on May 12, 2026.
On September 16, 2025, Jamshed Damkewala announced on the .NET Blog that STS releases are now supported for 24 months, starting with .NET 9. LTS stays at three years. That pushed .NET 9 from May 12, 2026 to November 10, 2026, which is exactly where .NET 8 already was.
Stretching STS to 24 months means the STS release now ends on the same date as the LTS release before it, so an STS dependency keeps the same end-of-support date as your LTS app. Out-of-band (OOB) components like .NET Aspire still keep their own independent lifecycles, so check those separately.
I think this is a sensible fix to a real problem. The side effect is that two releases now fall off the support calendar on the same day, and anyone who planned around the May 2026 date for .NET 9 got six extra months they may not have noticed.
The math also repeats. Even-numbered LTS releases ship in November and get three years. Odd-numbered STS releases ship the following November and now get two years. Both land on the same November. I suspect .NET 10 and .NET 11 will share an end-of-support date in November 2028 the same way, so this is the new normal rather than a one-off.
Where does each .NET version stand?
Source: .NET and .NET Core Support Policy, as of October 19, 2026.
Which version should I upgrade to?
.NET 10.
It is the current LTS release and it is supported until November 14, 2028. Under the 24-month STS policy, waiting for .NET 11 does not buy you more time, it buys you a newer release that I suspect expires the same month.
If you are on .NET 9, the jump to .NET 10 is one version and usually small. If you are on .NET 8, you are crossing two releases worth of breaking changes, so budget for it. ASP.NET Core apps should also read the ASP.NET Core 9 to 10 migration guide.
At its simplest, the upgrade is a one-line change in each project file:
<TargetFramework>net10.0</TargetFramework>
The one-line change is rarely the whole job, however. The real work is in the NuGet packages that need a compatible release, the global.json that pins the old SDK, the Dockerfiles that pull mcr.microsoft.com/dotnet/aspnet:8.0, and the CI pipelines and hosting environments that need the new runtime installed.
For third-party applications you run but do not build, ask the vendor for a release that targets .NET 10.
How do I upgrade to .NET 10 with GitHub Copilot?
Not with the .NET Upgrade Assistant. Microsoft's documentation now says ".NET Upgrade Assistant is officially deprecated." It is still linked from the end-of-support announcement, which is confusing, but the tool has been replaced.
The replacement is the GitHub Copilot upgrade agent. The source and plugins live at github.com/microsoft/upgrade-agent-plugins. Mika Dumont walks through it in Modernize .NET Anywhere with GitHub Copilot.
It works in three stages, and writes each one to a Markdown file under .github/upgrades/ in your repo so you can review and commit it:
- Assess: it examines your projects and dependencies and writes assessment.md, listing breaking changes, API compatibility issues, and deprecated patterns.
- Plan: it writes plan.md, with the upgrade strategy, dependency order, and risks.
- Execute: it breaks the plan into tasks.md, works through them, and makes a Git commit for each piece of work, so you can validate or roll back step by step.
It runs in four places. Pick the one you already use.
In Visual Studio 2026, or Visual Studio 2022 17.14.16 or later, right-click the solution or project in Solution Explorer and select Modernize.
In VS Code, install the GitHub Copilot upgrade extension, then select Upgrade in the Copilot Chat agent picker.
In the GitHub Copilot CLI, run:
/plugin marketplace add microsoft/upgrade-agent-plugins
/plugin install upgrade-agent@upgrade-agent-plugins
/agent
Select Upgrade, then prompt it with something like "upgrade my solution to .NET 10".
On GitHub, you can add it as a Copilot cloud agent that opens pull requests, using the cloud agent README. That route needs a paid Copilot plan with cloud agent access and write access to the repo.
A few things I would do regardless of which one you pick:
- Start with a small library or service, not the monolith, so you learn where the agent struggles on your codebase.
- Use Guided mode on anything large. Say "pause" to switch to Guided and "continue" to switch back to Automatic.
- Run the full test suite after each commit, not just at the end. The per-task commits are what make that cheap.
- Check your work when it finishes:
dotnet --list-runtimes
dotnet list package --outdated
The agent does not necessarily finish a large legacy solution on its own. Some early users report it stalling on bigger apps, and Microsoft is tracking that feedback in the repo. Treat it as a very fast first pass, not the whole migration.
What if we cannot upgrade from .NET 8 or .NET 9 by November 10, 2026?
Then you need someone patching the version of .NET you run.
HeroDevs Never-Ending Support (NES) for .NET is a secure, drop-in replacement for .NET 6, .NET 8, and .NET 9. It covers the runtime, ASP.NET, Entity Framework, the .NET SDK, WPF, and WinForms, and with NES for .NET Containers, the container images too. No code changes.
HeroDevs is a member of the .NET Security Group, so we receive advance disclosure of vulnerabilities affecting .NET and can ship patched builds for EOL versions alongside Microsoft's Patch Tuesday releases.
This is not hypothetical. We have been patching .NET 6 since it reached end of support on November 12, 2024. When CVE-2026-32178, an SMTP injection flaw in System.Net.Mail, left .NET 6 without an upstream fix, NES customers got one. On November 11, 2026, .NET 8 and .NET 9 join that list.
NES does not replace your migration to .NET 10. It means the migration happens on a schedule set by your engineering team, not by Patch Tuesday.
Frequently asked questions
When exactly do .NET 8 and .NET 9 reach end of support?
November 10, 2026, for both. It is a Patch Tuesday, and Microsoft may ship one final update for each that day if a critical issue is known.
Wasn't .NET 9 supposed to reach end of support in May 2026?
Yes, May 12, 2026, under the old 18-month STS policy. Microsoft extended STS to 24 months on September 16, 2025, starting with .NET 9, which moved it to November 10, 2026.
Will my .NET 8 or .NET 9 applications stop working?
No. They keep running. They stop receiving security fixes, bug fixes, and technical support from Microsoft.
Is the .NET Upgrade Assistant still supported?
No. Microsoft has deprecated it in favor of the GitHub Copilot upgrade agent, which ships with Visual Studio 2026 and Visual Studio 2022 17.14.16 or later, and is also available for VS Code, the Copilot CLI, and GitHub.
Should I wait for .NET 11 instead of upgrading to .NET 10?
No. .NET 11 is an STS release, and under the 24-month policy it should reach end of support around the same time as .NET 10 in November 2028. .NET 10 is available today and is the safer target.
Does HeroDevs support .NET 9 after November 10?
Yes. NES for .NET covers .NET 6, .NET 8, and .NET 9.
When the upgrade will not make the November 10 deadline
For every application that cannot move to .NET 10 before November 10, 2026, NES for .NET keeps .NET 6, 8, and 9 patched and audit-ready while the migration is done properly rather than rushed. Talk to our team about coverage.
Resources
View All Articles

