.NET 8 and 9 end of support on 10 November 2026: .NET 10 or .NET 11?

Install 8.0.34 or 9.0.23, fix Identity scaffolding, move Functions off in-process, then retarget to .NET 10. .NET 10 and 11 both end 14 Nov 2028.

Read time
17 min
Word count
2.6K
Sections
9
FAQs
8
Share
Two engineers plan a .NET 8 and 9 migration with Assess, Test and Deploy cards beside .NET and Azure logos
On this page · 9 sections
  1. What changed on 10 November 2026
  2. What out of support means in practice
  3. .NET 10 LTS or .NET 11 STS?
  4. Breaking changes to budget for
  5. Azure App Service and Azure Functions: the dates that matter
  6. Upgrade plan
  7. Where .NET Framework fits
  8. How eCorpIT can help
  9. References

Summary. .NET 8 and .NET 9 reached end of support on 10 November 2026, the same Patch Tuesday on which Microsoft shipped .NET 11. The final patches are 8.0.34 (SDK 8.0.428) and 9.0.23 (SDK 9.0.321). The 8.0.34 notes list 17 CVEs, including CVE-2026-118741 (CVSS 8.1), an Identity scaffolding flaw that a runtime update cannot fix: generated code has to be corrected and redeployed. Nothing switches off, but fixes shipped from the next Patch Tuesday, 8 December 2026, will not reach 8.0 or 9.0, and Azure App Service no longer patches or supports those stacks. The Azure Functions in-process model, which by then ran only .NET 8, lost support the same day. Both destinations end together: .NET 10 (LTS, now 10.0.15) and .NET 11 (STS, 11.0.0) are supported until 14 November 2028, because Microsoft moved STS releases to 24 months starting with .NET 9. So the choice is about risk, not runway. .NET 10 has 15 patch releases behind it and one fewer breaking-change list to absorb. .NET 11 adds C# 15 union types but raises the x86/x64 hardware floor and moves .NET MAUI mobile apps to CoreCLR. Our verdict: install the final patches now, move Functions to the isolated worker, then retarget most production apps to .NET 10.

About this article. For engineering leads, architects and platform teams still running .NET 8 or .NET 9. We checked every date, version and CVE on 11 November 2026 against Microsoft's .NET support policy and release metadata, the .NET Blog, the dotnet/core release notes, the CVE-2026-118741 advisory, Microsoft Learn pages for Azure Functions, App Service and .NET 11, and CISA's Known Exploited Vulnerabilities catalogue. Microsoft revises these pages often, so re-check versions before you commit a plan; no vendor paid for inclusion. Researched with AI assistance and reviewed by our editorial team.

What changed on 10 November 2026

Microsoft's .NET and .NET Core support policy page now carries a last-updated date of 10 November 2026, and the machine-readable release index matches it. The rows that matter:

Version Released Latest patch Type Status End of support
.NET 11 10 Nov 2026 11.0.0 STS Active 14 Nov 2028
.NET 10 11 Nov 2025 10.0.15 (10 Nov 2026) LTS Active 14 Nov 2028
.NET 9 12 Nov 2024 9.0.23 (10 Nov 2026) STS Out of support 10 Nov 2026
.NET 8 14 Nov 2023 8.0.34 (10 Nov 2026) LTS Out of support 10 Nov 2026
.NET 7 8 Nov 2022 7.0.20 STS Out of support 14 May 2024
.NET 6 8 Nov 2021 6.0.36 LTS Out of support 12 Nov 2024

Three details in that table drive the plan.

The last patches carry a lot. .NET 8.0.34, shipped with SDKs 8.0.428 and 8.0.134, lists 17 CVEs: nine in ASP.NET Core, three in the .NET runtime and libraries, and five with Visual Studio remote code execution titles. 9.0.23 lists 16; the one it lacks, CVE-2026-109478, is listed for .NET 8 only. Two of them need more than a runtime install:

  • CVE-2026-118741 is an elevation-of-privilege flaw in the ASP.NET Core Identity scaffolding and templates. Generated password-reset and email-confirmation handlers send mail to the address supplied in the request instead of the one stored on the account. Microsoft rates it 8.1 (High), and the advisory's CVSS vector marks exploit maturity as unproven. Fixed versions are the code generator packages 8.0.24, 9.0.13 and 10.0.3, the web project templates 8.0.34, 9.0.23 and 10.0.15, and the Microsoft.dotnet-scaffold tool 20.3.0. Updating any of these does not repair apps you already generated: change the ForgotPassword and ResendEmailConfirmation handlers to use the stored address, then rebuild and redeploy.
  • CVE-2026-118747, a denial-of-service issue, also needs the System.Formats.Cbor NuGet package updated. On the .NET 9 line the fixed package is 9.0.24, so installing runtime 9.0.23 alone does not close it.

Two weeks earlier, on 25 October, Microsoft shipped out-of-band updates (8.0.33, 9.0.22 and 10.0.14) for CVE-2026-111497, a buffer overflow in .NET's use of Brotli decompression, and CVE-2026-114148, unsafe ownership metadata in Linux tarballs. CISA added the Brotli flaw to its Known Exploited Vulnerabilities catalogue on 27 October with a federal due date of 10 November. None of the November .NET CVEs was in the catalogue's 10 November edition when we checked. Our Brotli CVE-2026-111497 patch guide covers the other products that embed that decoder. A .NET 8 estate that skipped recent patching is not just out of support; it is missing a cluster of late fixes.

The two destinations expire together. The policy gives LTS releases three years and STS releases two. STS used to mean 18 months, and .NET 9 was originally due to end on 12 May 2026. In September 2025 Microsoft extended STS to 24 months starting with .NET 9, which is why .NET 8 and 9 ended on the same day, and why .NET 11 now ends on the same day as .NET 10.

Some documentation still lags. The policy, release index and release notes all show 11.0.0 and the final 8.0 and 9.0 patches. On 11 November, Microsoft Learn's What's new in .NET 11 overview still said it was last updated for release candidate 2, and the .NET 11 breaking-change list is marked as incomplete. Treat the .NET 11 announcement and the release notes as the current record.

What out of support means in practice

The runtime does not switch off. A .NET 8 or 9 application keeps running today and after. What stops is everything around it.

  1. No more security fixes. Microsoft ships .NET updates on Patch Tuesday, the second Tuesday of each month, though not every Patch Tuesday brings a .NET release. The next one is 8 December 2026. Whatever Microsoft fixes in .NET 10 and 11 from then on will not be built for 8.0 or 9.0, and the policy warns that out-of-support versions can put applications, data and the wider computing environment at risk.
  1. No Microsoft support. The policy defines end of life as the point when Microsoft stops providing fixes, updates and online technical assistance. Expect a support case about a .NET 8 crash to start with a request to upgrade.
  1. No automatic patching. Supported versions on Windows can be patched through Microsoft Update, which only helps framework-dependent apps. Self-contained deployments always carried their own runtime, and that bundled runtime is now frozen at whatever you last published.
  1. Azure stops covering the stack. App Service's runtime policy says apps on an end-of-support language version continue to run unchanged, but App Service cannot provide security patches or related support for that runtime, and you must move to a supported version before App Service support will help.
  1. No paid extension. The .NET policy describes no extended security update programme for .NET 8 or 9. Its advice is to move to a newer version and to uninstall versions you no longer use.

The risk is uneven across a portfolio. An internet-facing ASP.NET Core API that parses untrusted input carries far more exposure than a nightly batch job on a private network. Rank apps by exposure, not by codebase size, and patch everything to 8.0.34 or 9.0.23 now so the unpatched gap starts as small as possible.

.NET 10 LTS or .NET 11 STS?

With identical end dates, the trade-off is maturity against features. The table below draws on the support policy, the .NET 11 announcement, Microsoft Learn's hardware note and the Azure Functions versions page.

Factor .NET 10 (LTS) .NET 11 (STS)
Released 11 Nov 2025 10 Nov 2026
Servicing history 15 patch releases, now 10.0.15 Day one, 11.0.0
End of support 14 Nov 2028 14 Nov 2028
Breaking-change lists to absorb from .NET 8 .NET 9 and .NET 10 .NET 9, .NET 10 and .NET 11
x86/x64 minimum hardware x86-64-v1 x86-64-v2
.NET MAUI mobile runtime Mono CoreCLR
Azure Functions isolated worker GA, supported to 14 Nov 2028 GA; needs Azure.Functions.Sdk 1.0.1 or later and an explicit Worker package reference
Notable additions A year of fixes already shipped C# 15 union types, closed hierarchies and extension indexers; Zstandard compression; X25519 key exchange; Runtime Async as an opt-in preview
Visual Studio Visual Studio 2026 needed to target net10.0 Up-to-date Visual Studio 2026

The Visual Studio row comes from Microsoft's SDK versioning table: SDK 10.0.100 ships with Visual Studio 18.0 (Visual Studio 2026), and the oldest release it works with, 17.14, can target only up to net9.0. Our Visual Studio 2022 end of mainstream support guide covers that move. If C# 15 is the draw, our C# union types and .NET 11 migration guide shows how to adopt unions without boxing on hot paths.

How to choose

Situation Pick Why
Production line-of-business apps on .NET 8 .NET 10 One fewer breaking-change list, a year of patches, same end date
Azure Functions estates leaving the in-process model .NET 10 Change the execution model and the runtime on the most settled pairing
Greenfield services starting now .NET 11 No migration cost, and C# 15 from the first commit
Teams that want C# 15 union types now .NET 11 C# 15 is the default language version for projects targeting .NET 11
.NET MAUI mobile apps .NET 10 first .NET 11 moves mobile apps to CoreCLR, drops Android x86 and raises the minimum Android API level to 24
Fleets with older x86/x64 servers or masked VM CPU profiles .NET 10 .NET 11 will not start without x86-64-v2
Apps already on .NET 9 Either You already upgrade yearly; .NET 11 keeps that rhythm

Whichever you pick, budget for the next move. Microsoft publishes a major release every November and even-numbered releases are LTS, so if that cadence holds, the next LTS arrives in November 2027. Neither .NET 10 nor .NET 11 is a five-year home.

Breaking changes to budget for

Microsoft publishes a breaking-change list for every release and marks the .NET 11 list as a work in progress. The items most likely to affect server teams:

  • Minimum hardware. .NET 11 raises the x86/x64 baseline from x86-64-v1 to x86-64-v2 on Windows, Linux and macOS, adding CX16, POPCNT, SSE3, SSSE3, SSE4.1 and SSE4.2 to the guaranteed set. On older CPUs it fails to start and reports missing baseline instruction sets. Microsoft says the last chips without these went out of vendor support around 2013, but check on-premises servers and any VM cluster that presents a reduced CPU feature set. ReadyToRun code now targets x86-64-v3 on Windows and Linux, so CPUs without AVX2 may spend extra start-up time in the JIT.
  • Hosting behaviour. IHost.RunAsync and IHost.StopAsync now throw when a BackgroundService fails, which changes how worker services exit and what orchestrators see.
  • Configuration. Empty strings in chained configuration now override earlier providers, so an empty environment variable can blank a value that appsettings.json used to supply.
  • Parsing and maths. The DateOnly and TimeOnly TryParse methods now throw for some invalid input (read the note for the exact cases), and Math.Round and MathF.Round return correctly rounded results. Financial and reporting code deserves a regression run.
  • Unix behaviour. Named mutexes default to user scope, and NamedPipeServerStream with CurrentUserOnly tightens socket file permissions. Linux apps that share a mutex across users need a look.
  • TLS and crypto. Server-side SslStream no longer downloads AIA certificates by default, Linux AIA fetching is capped at two fetches per chain build, and DSA is removed on macOS.
  • SDK and restore. Restore no longer searches the global packages folder for a higher version, which can expose missing packages in offline or cached CI builds.
  • .NET MAUI. CoreCLR replaces Mono for mobile apps, Android x86 is not supported, and the minimum Android API level rises to 24. .NET MAUI also follows its own support policy, separate from the runtime's LTS and STS dates.

Going from .NET 8 to .NET 10 skips the .NET 11 list entirely, which is the strongest practical argument for the LTS hop in large estates.

Azure App Service and Azure Functions: the dates that matter

Many .NET workloads on Azure run on App Service or Functions. The table below comes from Microsoft Learn's Functions runtime versions page and the App Service language runtime policy.

Service What changed Date What to do
App Service, .NET 8 and 9 stacks Apps keep running; no runtime security patches or related support 10 Nov 2026 Switch the stack to .NET 10, or .NET 11 when offered
Functions in-process model Support ended; the model only ran .NET 8 10 Nov 2026 Migrate to the isolated worker model
Functions isolated, .NET 8 and 9 End of support 10 Nov 2026 Retarget to .NET 10 or 11
Functions isolated, .NET 10 GA Supported to 14 Nov 2028 Default target for most apps
Functions isolated, .NET 11 GA Follows the .NET policy Use Azure.Functions.Sdk 1.0.1 or later plus an explicit Worker package reference
Linux Consumption plan No .NET versions after .NET 9 Plan retires 30 Sep 2028 Move to Flex Consumption to run .NET 10 or 11
Functions runtime 1.x Support ended 14 Sep 2026 Migrate to runtime 4.x

Three practical consequences follow.

Functions upgrades are two projects, not one. The in-process model supports only .NET 8, so you cannot retarget an in-process app to .NET 10 where it stands. Move to the isolated worker first, deploy, then change the target framework. The worker change touches bindings, start-up and logging code, so test it as its own release; Microsoft's isolated-model migration guide, linked from the versions page, is the starting point.

Linux Consumption is a dead end for new .NET versions. Microsoft says newer .NET versions are not being added to Linux Consumption, so an app on that plan needs a hosting change to Flex Consumption before it can run .NET 10. Price that move now rather than discovering it during cutover.

App Service notices may have missed your engineers. App Service sends end-of-support reminders to subscription owners, account administrators, service administrators and co-administrators. Contributors and readers get them only if they opt in through Service Health alerts. The App Service team blog had not announced a built-in .NET 11 stack when we checked on 11 November, so confirm the available stacks before planning a .NET 11 deployment. Until one appears, the fallback is a custom container, which App Service's policy recommends whenever you need a specific runtime version.

Upgrade plan

A sequence that works for a portfolio of ten apps or a hundred.

Day 0: close what you can today


            # What is installed on each build agent and server
dotnet --list-sdks
dotnet --list-runtimes

# Which projects still target .NET 8 or 9 (props files can set it too)
grep -rlE "<TargetFrameworks?>.*net(8|9)\.0" --include="*.csproj" --include="*.props" .

# Which container images still pull 8.0 or 9.0 base images
grep -rE "mcr\.microsoft\.com/dotnet/[a-z-]+:(8|9)\.0" --include="Dockerfile*" .
          

Install 8.0.34 or 9.0.23 on every host. Rebuild and republish self-contained apps and container images so they carry the final runtime, because a newer runtime on the host does not update one bundled inside an app. If any app was generated from ASP.NET Core Identity templates, apply the CVE-2026-118741 handler repair, and update System.Formats.Cbor wherever you reference it.

Weeks 1 to 2: inventory and decide

For each app, record the target framework, hosting (App Service, Functions in-process or isolated, containers, IIS, VMs), exposure (internet-facing or internal), test coverage and owner. Apply the decision table above. Flag every Functions app on the in-process model or the Linux Consumption plan, because those need hosting work before the runtime change.

Weeks 2 to 6: retarget

  1. Pin the SDK. Add a global.json so local builds and CI resolve the same SDK. The example below accepts 10.0.404 or a later patch in the 10.0.4xx feature band, and nothing else.
  1. Change the target framework to net10.0 (or net11.0), and move Microsoft.*, Entity Framework Core and ASP.NET Core packages to the matching major version.
  1. Use the supported tooling. Microsoft Learn marks the .NET Upgrade Assistant as officially deprecated (page last updated 19 March 2026) and points to the GitHub Copilot modernization chat agent in Visual Studio 2026 and Visual Studio 2022 17.14.16 or later. It produces a step-by-step plan and commits each change, which suits code review. Treat its output like any other pull request.
  1. Run the breaking-change checklist above, plus Microsoft's lists for every release you skip.
  1. Run characterisation and performance tests against the old build first, so you have a baseline to compare with.

            {
  "sdk": {
    "version": "10.0.404",
    "rollForward": "latestPatch"
  }
}
          

Weeks 4 to 8: deploy and clean up

Deploy through staging with a rollback path, switch App Service stacks or container base images, and watch error rates, memory and start-up time for a full business cycle. Then uninstall the .NET 8 and 9 runtimes from servers that no longer need them, as the support policy recommends, so nothing quietly falls back to them.

Where .NET Framework fits

None of this changes .NET Framework 4.8. From version 4.5.2 onward, .NET Framework is a component of Windows and follows the lifecycle of the Windows version it is installed on, so a Web Forms or WCF application did not lose support on 10 November. The deadline applies to modern .NET, the former Core line. Our .NET development company guide explains which Framework technologies have no modern equivalent, and our Windows Server 2016 end-of-support playbook covers the operating system clock under those apps.

How eCorpIT can help

eCorpIT is a Gurugram-based technology organisation, founded in 2021, assessed at CMMI Level 5 and MSME certified, with senior-led engineering teams working across AWS, Microsoft and Google platforms. Our application development services team plans and runs .NET runtime upgrades, from final-patch rollout and Azure Functions moves to the isolated worker through retargeting and regression testing against a baseline. Talk to us at /contact-us/.

Last updated: 11 November 2026.

References

  1. .NET and .NET Core Support Policy, last updated 10 November 2026 — Microsoft
  1. .NET release metadata index — Microsoft
  1. .NET 8.0.34 release notes, 10 November 2026 — dotnet/core on GitHub
  1. Microsoft Security Advisory CVE-2026-118741, ASP.NET Core Elevation of Privilege Vulnerability — dotnet/announcements on GitHub
  1. Language runtime support policy for Azure App Service — Microsoft Learn
  1. Compare Azure Functions runtime versions — Microsoft Learn
  1. .NET STS releases supported for 24 months, 16 September 2025 — .NET Blog
  1. .NET 9.0.23 release notes, 10 November 2026 — dotnet/core on GitHub
  1. .NET and .NET Framework November 2026 servicing updates, 10 November 2026 — .NET Blog
  1. .NET October 2026 Out-of-Band Security Updates, 25 October 2026 — .NET Blog
  1. Known Exploited Vulnerabilities Catalog, JSON feed, version 2026.11.10 — CISA
  1. What's new in .NET 11 — Microsoft Learn
  1. Breaking changes in .NET 11 — Microsoft Learn
  1. Announcing .NET 11, 10 November 2026 — .NET Blog
  1. Breaking change: minimum hardware requirements updated (.NET 11) — Microsoft Learn
  1. .NET SDK, MSBuild and Visual Studio versioning — Microsoft Learn
  1. Azure App Service team blog — Microsoft
  1. global.json overview — Microsoft Learn
  1. What is .NET Upgrade Assistant? — Microsoft Learn
  1. Lifecycle FAQ: .NET Framework — Microsoft Learn

Frequently asked

Quick answers.

01 Is .NET 8 still supported after 10 November 2026?
No. Microsoft's support policy lists .NET 8 and .NET 9 as out of support from 10 November 2026, with 8.0.34 and 9.0.23 as the final patches. Applications keep running, but Microsoft no longer ships fixes or offers technical assistance, and Azure App Service no longer patches or supports those runtime stacks.
02 Will my .NET 8 application stop working?
No. The runtime does not expire or disable itself, and App Service says apps on an end-of-support stack continue to run unchanged. The risk is that vulnerabilities fixed from December 2026 onward stay open in your build, and that support cases will begin with a request to upgrade first.
03 Should I move to .NET 10 or .NET 11?
Most production estates should move to .NET 10. It has fifteen patch releases behind it, needs one fewer breaking-change list from .NET 8, and ends on 14 November 2028, the same day as .NET 11. Choose .NET 11 for greenfield work or when you want C# 15 union types now.
04 Can I go straight from .NET 8 to .NET 11?
Yes. Retargeting can skip versions, but you absorb the breaking changes of .NET 9, 10 and 11 at once, and .NET 11 needs x86-64-v2 hardware. Teams with strong automated tests can do it in one step; others usually find two smaller hops easier to test and roll back.
05 What happens to Azure Functions on the in-process model?
Support for the in-process model ended on 10 November 2026, and by then it supported only .NET 8. To reach .NET 10 or 11, migrate the app to the isolated worker model first, then retarget. Apps on the Linux Consumption plan must also move to Flex Consumption, because .NET 9 is its last version.
06 Is installing 8.0.34 or 9.0.23 enough?
Not always. If an app was generated from ASP.NET Core Identity templates, CVE-2026-118741 sits in the generated code, so you must fix the password-reset and email-confirmation handlers and redeploy. Apps that reference the System.Formats.Cbor package also need that package updated, to 9.0.24 on the .NET 9 line.
07 Is the .NET Upgrade Assistant still the right tool?
No. Microsoft Learn marks the .NET Upgrade Assistant as officially deprecated and points teams to the GitHub Copilot modernization chat agent in Visual Studio 2026 and Visual Studio 2022 17.14.16 or later. It plans the upgrade, applies fixes and commits each change separately, so every step can be reviewed or rolled back.
08 Will .NET 11 run on our older servers?
Only if the CPUs support the x86-64-v2 instruction set, which adds CX16, POPCNT, SSE3, SSSE3, SSE4.1 and SSE4.2 to the old baseline. Microsoft says the last chips without them went out of vendor support around 2013. Check on-premises hardware and any virtual machine cluster that masks CPU features first.

About the author

Manu Shukla

Founder & Director

Founder of eCorpIT. Hands-on engineer leading senior-only delivery for AI apps, custom software, and cloud systems for global clients.

Subscribe

One engineering note a week. No fluff, no spam.

Senior-architect playbooks on AI agents, mobile apps, cloud, security, data, and marketing — delivered every Wednesday.

Past the reading

Read enough. Let's build something.

A senior architect responds in 24 working hours with scope, indicative cost, and a timeline. NDA before any technical conversation.

Loading search…

Browse all guides