blog
September 3, 2026
Support for .NET 8 and .NET 9 ends on 10 November 2026: what must production teams upgrade?
Microsoft’s current .NET support policy lists the same end-of-support date for .NET 8 LTS and .NET 9 STS: 10 November 2026. .NET 10 LTS remains supported until 14 November 2028. .NET 8 and 9 are already in maintenance support, which means Microsoft is providing security updates only. Customers must also remain current on released patches to qualify for support.
For production teams already migrating, the immediate risk is a definition of completion that covers the application code while missing the runtime, dependencies, containers, build environment or self-contained releases.
Changing TargetFramework to net10.0 and producing a successful build does not prove that a production system has been upgraded. The work is complete when the supported version can be built, deployed, operated and recovered across every in-scope deployment route.
Applications running on .NET 8 or 9 will not stop on 11 November. Microsoft will, however, stop providing fixes, updates and online technical assistance for those releases. Any vulnerability discovered after that point will not receive a .NET 8 or 9 fix through normal Microsoft servicing, although teams may sometimes be able to apply a compensating mitigation while completing the upgrade.
Running an unsupported release may also create an exception under a company’s security policy, customer commitments or software-support requirements. Until the migration is released, teams should keep their .NET 8 and 9 installations on the latest available patches.
Management should define the scope by deployed workloads rather than repositories or completed development tickets. Before the migration is signed off, each team should be able to confirm that:
This prevents a migration from appearing complete while an overlooked background service, installer, disaster-recovery host or customer-specific deployment still contains .NET 8 or 9.
In most cases, yes. A .NET 8 application does not need to be released on .NET 9 before it moves to .NET 10. Since .NET 9 reaches end of support on the same day, treating it as the final destination would not extend the support window.
A team moving from .NET 8 should review the changes introduced in both .NET 9 and .NET 10. A team already running .NET 9 needs to review the .NET 10 changes.
Microsoft classifies breaking changes as source incompatibilities, binary incompatibilities and behavioural changes. Compilation will expose many source problems, but it will not reliably reveal binary or behavioural problems. Authentication, serialization, database access, configuration, background processing and external integrations therefore require functional testing.
Microsoft also describes the .NET 10 compatibility list as incomplete, so it should be treated as a starting point rather than a replacement for application-specific tests.
Large systems may still require a staged release. Shared libraries should be reviewed in dependency order, but because .NET 10 continues to support .NET Standard 2.0 and 2.1, a compatible library does not need to be retargeted solely because a consuming application moves to .NET 10. Libraries that do require changes can move before applications, and independently deployed services can be released separately. This is a sequencing decision rather than a requirement to operate temporarily on .NET 9.
Retargeting the application is only the first step. Production readiness depends on five connected areas:
From a management perspective, the migration is complete only when every supported deployment route produces an artifact that can be deployed, operated and recovered on .NET 10.
The final part of a migration often contains more uncertainty than the initial retargeting. The remaining work may sit in one unsupported package, a brittle integration, missing regression tests or a deployment path owned by another team.
A useful management view should report:
Raw workload counts can be misleading. Migrating ten minor jobs does not compensate for leaving the main transactional platform unsupported. Progress should therefore be assessed against business criticality and residual production risk, not only the number of completed projects or pull requests.
Database schema changes, message contracts or independently deployed services may make rollback unsafe even when the previous application artifact remains available. Those releases need backward-compatible changes that preserve rollback or a tested roll-forward recovery route. Where a rollback to .NET 8 or 9 remains technically possible after the deadline, it would restore an unsupported production state and should be treated as a time-limited exception with a defined route back to .NET 10.
Microsoft now provides a GitHub Copilot upgrade agent that can assess .NET projects, prepare an upgrade plan, apply code fixes and validate builds and tests. For one or a few applications, this agent and the normal engineering toolchain may be sufficient.
A custom AI migration harness is justified when the same controlled process must be applied across many repositories, internal packages and company-specific delivery rules, and the repeated work clearly outweighs the setup and review cost.
It should operate as a bounded engineering loop:
This can reduce the manual effort spent locating and repeating predictable changes across many services. It does not remove the need for senior judgement where behaviour depends on undocumented business rules, external systems or weak test coverage.
Management should judge the process by accepted production migrations rather than generated changes. If AI produces patches faster but creates more review and correction work, it has moved the bottleneck rather than added delivery capacity.
For teams that are falling behind, the problem usually isn't a lack of general .NET knowledge. The remaining tasks require the same senior developers who are also responsible for architecture, reviews, incidents and committed product releases.
The application may compile on .NET 10 but still be unreleasable. One dependency may block several services, container and pipeline work may remain unfinished, or existing tests may not provide enough confidence.
At that point, assigning more migration work to the internal technical leads can protect the deadline only by delaying other critical delivery.
Blocshop can add one to three senior .NET developers directly to the existing team and backlog for the period in which that additional ownership is needed. They can take responsibility for a bounded workstream such as a blocked dependency path, a defined group of services, container and CI/CD changes, missing regression coverage or release preparation.
Work begins by isolating a workstream that can progress with limited domain onboarding and agreeing its repositories, acceptance criteria, first production-relevant deliverable and handover point. The client’s technical leads retain architectural control, while Blocshop carries the agreed work through implementation, testing and production release.
Blocshop’s .NET and Azure work for BCC, for example, began with a defined checkout project and developed into a long-term engagement that included migrating legacy e-commerce systems to a microservices architecture. Where repeated changes across many repositories justify it, the same team can add a controlled AI migration process while senior developers remain responsible for the accepted result.
Is one unresolved workstream now threatening the 10 November deadline or displacing your product delivery? Book a consultation with Blocshop and bring the blocker consuming the most senior engineering time.
Together, we will determine whether Blocshop can take responsibility for it with limited domain onboarding, what the first production deliverable should be and what evidence would mark it complete, giving you a concrete scope before you decide whether to proceed.
Learn more from our insights

blog
September 3, 2026
Support for .NET 8 and .NET 9 ends on 10 November 2026: what must production teams upgrade?
Microsoft’s current .NET support policy lists the same end-of-support date for .NET 8 LTS and .NET 9 STS: 10 November 2026. .NET 10 LTS remains supported until 14 November 2028. .NET 8 and 9 are already in maintenance support, which means Microsoft is providing security updates only. Customers must also remain current on released patches to qualify for support.
For production teams already migrating, the immediate risk is a definition of completion that covers the application code while missing the runtime, dependencies, containers, build environment or self-contained releases.
Changing TargetFramework to net10.0 and producing a successful build does not prove that a production system has been upgraded. The work is complete when the supported version can be built, deployed, operated and recovered across every in-scope deployment route.
Applications running on .NET 8 or 9 will not stop on 11 November. Microsoft will, however, stop providing fixes, updates and online technical assistance for those releases. Any vulnerability discovered after that point will not receive a .NET 8 or 9 fix through normal Microsoft servicing, although teams may sometimes be able to apply a compensating mitigation while completing the upgrade.
Running an unsupported release may also create an exception under a company’s security policy, customer commitments or software-support requirements. Until the migration is released, teams should keep their .NET 8 and 9 installations on the latest available patches.
Management should define the scope by deployed workloads rather than repositories or completed development tickets. Before the migration is signed off, each team should be able to confirm that:
This prevents a migration from appearing complete while an overlooked background service, installer, disaster-recovery host or customer-specific deployment still contains .NET 8 or 9.
In most cases, yes. A .NET 8 application does not need to be released on .NET 9 before it moves to .NET 10. Since .NET 9 reaches end of support on the same day, treating it as the final destination would not extend the support window.
A team moving from .NET 8 should review the changes introduced in both .NET 9 and .NET 10. A team already running .NET 9 needs to review the .NET 10 changes.
Microsoft classifies breaking changes as source incompatibilities, binary incompatibilities and behavioural changes. Compilation will expose many source problems, but it will not reliably reveal binary or behavioural problems. Authentication, serialization, database access, configuration, background processing and external integrations therefore require functional testing.
Microsoft also describes the .NET 10 compatibility list as incomplete, so it should be treated as a starting point rather than a replacement for application-specific tests.
Large systems may still require a staged release. Shared libraries should be reviewed in dependency order, but because .NET 10 continues to support .NET Standard 2.0 and 2.1, a compatible library does not need to be retargeted solely because a consuming application moves to .NET 10. Libraries that do require changes can move before applications, and independently deployed services can be released separately. This is a sequencing decision rather than a requirement to operate temporarily on .NET 9.
Retargeting the application is only the first step. Production readiness depends on five connected areas:
From a management perspective, the migration is complete only when every supported deployment route produces an artifact that can be deployed, operated and recovered on .NET 10.
The final part of a migration often contains more uncertainty than the initial retargeting. The remaining work may sit in one unsupported package, a brittle integration, missing regression tests or a deployment path owned by another team.
A useful management view should report:
Raw workload counts can be misleading. Migrating ten minor jobs does not compensate for leaving the main transactional platform unsupported. Progress should therefore be assessed against business criticality and residual production risk, not only the number of completed projects or pull requests.
Database schema changes, message contracts or independently deployed services may make rollback unsafe even when the previous application artifact remains available. Those releases need backward-compatible changes that preserve rollback or a tested roll-forward recovery route. Where a rollback to .NET 8 or 9 remains technically possible after the deadline, it would restore an unsupported production state and should be treated as a time-limited exception with a defined route back to .NET 10.
Microsoft now provides a GitHub Copilot upgrade agent that can assess .NET projects, prepare an upgrade plan, apply code fixes and validate builds and tests. For one or a few applications, this agent and the normal engineering toolchain may be sufficient.
A custom AI migration harness is justified when the same controlled process must be applied across many repositories, internal packages and company-specific delivery rules, and the repeated work clearly outweighs the setup and review cost.
It should operate as a bounded engineering loop:
This can reduce the manual effort spent locating and repeating predictable changes across many services. It does not remove the need for senior judgement where behaviour depends on undocumented business rules, external systems or weak test coverage.
Management should judge the process by accepted production migrations rather than generated changes. If AI produces patches faster but creates more review and correction work, it has moved the bottleneck rather than added delivery capacity.
For teams that are falling behind, the problem usually isn't a lack of general .NET knowledge. The remaining tasks require the same senior developers who are also responsible for architecture, reviews, incidents and committed product releases.
The application may compile on .NET 10 but still be unreleasable. One dependency may block several services, container and pipeline work may remain unfinished, or existing tests may not provide enough confidence.
At that point, assigning more migration work to the internal technical leads can protect the deadline only by delaying other critical delivery.
Blocshop can add one to three senior .NET developers directly to the existing team and backlog for the period in which that additional ownership is needed. They can take responsibility for a bounded workstream such as a blocked dependency path, a defined group of services, container and CI/CD changes, missing regression coverage or release preparation.
Work begins by isolating a workstream that can progress with limited domain onboarding and agreeing its repositories, acceptance criteria, first production-relevant deliverable and handover point. The client’s technical leads retain architectural control, while Blocshop carries the agreed work through implementation, testing and production release.
Blocshop’s .NET and Azure work for BCC, for example, began with a defined checkout project and developed into a long-term engagement that included migrating legacy e-commerce systems to a microservices architecture. Where repeated changes across many repositories justify it, the same team can add a controlled AI migration process while senior developers remain responsible for the accepted result.
Is one unresolved workstream now threatening the 10 November deadline or displacing your product delivery? Book a consultation with Blocshop and bring the blocker consuming the most senior engineering time.
Together, we will determine whether Blocshop can take responsibility for it with limited domain onboarding, what the first production deliverable should be and what evidence would mark it complete, giving you a concrete scope before you decide whether to proceed.
Learn more from our insights
Talk to sales

blog
September 3, 2026
Support for .NET 8 and .NET 9 ends on 10 November 2026: what must production teams upgrade?
Microsoft’s current .NET support policy lists the same end-of-support date for .NET 8 LTS and .NET 9 STS: 10 November 2026. .NET 10 LTS remains supported until 14 November 2028. .NET 8 and 9 are already in maintenance support, which means Microsoft is providing security updates only. Customers must also remain current on released patches to qualify for support.
For production teams already migrating, the immediate risk is a definition of completion that covers the application code while missing the runtime, dependencies, containers, build environment or self-contained releases.
Changing TargetFramework to net10.0 and producing a successful build does not prove that a production system has been upgraded. The work is complete when the supported version can be built, deployed, operated and recovered across every in-scope deployment route.
Applications running on .NET 8 or 9 will not stop on 11 November. Microsoft will, however, stop providing fixes, updates and online technical assistance for those releases. Any vulnerability discovered after that point will not receive a .NET 8 or 9 fix through normal Microsoft servicing, although teams may sometimes be able to apply a compensating mitigation while completing the upgrade.
Running an unsupported release may also create an exception under a company’s security policy, customer commitments or software-support requirements. Until the migration is released, teams should keep their .NET 8 and 9 installations on the latest available patches.
Management should define the scope by deployed workloads rather than repositories or completed development tickets. Before the migration is signed off, each team should be able to confirm that:
This prevents a migration from appearing complete while an overlooked background service, installer, disaster-recovery host or customer-specific deployment still contains .NET 8 or 9.
In most cases, yes. A .NET 8 application does not need to be released on .NET 9 before it moves to .NET 10. Since .NET 9 reaches end of support on the same day, treating it as the final destination would not extend the support window.
A team moving from .NET 8 should review the changes introduced in both .NET 9 and .NET 10. A team already running .NET 9 needs to review the .NET 10 changes.
Microsoft classifies breaking changes as source incompatibilities, binary incompatibilities and behavioural changes. Compilation will expose many source problems, but it will not reliably reveal binary or behavioural problems. Authentication, serialization, database access, configuration, background processing and external integrations therefore require functional testing.
Microsoft also describes the .NET 10 compatibility list as incomplete, so it should be treated as a starting point rather than a replacement for application-specific tests.
Large systems may still require a staged release. Shared libraries should be reviewed in dependency order, but because .NET 10 continues to support .NET Standard 2.0 and 2.1, a compatible library does not need to be retargeted solely because a consuming application moves to .NET 10. Libraries that do require changes can move before applications, and independently deployed services can be released separately. This is a sequencing decision rather than a requirement to operate temporarily on .NET 9.
Retargeting the application is only the first step. Production readiness depends on five connected areas:
From a management perspective, the migration is complete only when every supported deployment route produces an artifact that can be deployed, operated and recovered on .NET 10.
The final part of a migration often contains more uncertainty than the initial retargeting. The remaining work may sit in one unsupported package, a brittle integration, missing regression tests or a deployment path owned by another team.
A useful management view should report:
Raw workload counts can be misleading. Migrating ten minor jobs does not compensate for leaving the main transactional platform unsupported. Progress should therefore be assessed against business criticality and residual production risk, not only the number of completed projects or pull requests.
Database schema changes, message contracts or independently deployed services may make rollback unsafe even when the previous application artifact remains available. Those releases need backward-compatible changes that preserve rollback or a tested roll-forward recovery route. Where a rollback to .NET 8 or 9 remains technically possible after the deadline, it would restore an unsupported production state and should be treated as a time-limited exception with a defined route back to .NET 10.
Microsoft now provides a GitHub Copilot upgrade agent that can assess .NET projects, prepare an upgrade plan, apply code fixes and validate builds and tests. For one or a few applications, this agent and the normal engineering toolchain may be sufficient.
A custom AI migration harness is justified when the same controlled process must be applied across many repositories, internal packages and company-specific delivery rules, and the repeated work clearly outweighs the setup and review cost.
It should operate as a bounded engineering loop:
This can reduce the manual effort spent locating and repeating predictable changes across many services. It does not remove the need for senior judgement where behaviour depends on undocumented business rules, external systems or weak test coverage.
Management should judge the process by accepted production migrations rather than generated changes. If AI produces patches faster but creates more review and correction work, it has moved the bottleneck rather than added delivery capacity.
For teams that are falling behind, the problem usually isn't a lack of general .NET knowledge. The remaining tasks require the same senior developers who are also responsible for architecture, reviews, incidents and committed product releases.
The application may compile on .NET 10 but still be unreleasable. One dependency may block several services, container and pipeline work may remain unfinished, or existing tests may not provide enough confidence.
At that point, assigning more migration work to the internal technical leads can protect the deadline only by delaying other critical delivery.
Blocshop can add one to three senior .NET developers directly to the existing team and backlog for the period in which that additional ownership is needed. They can take responsibility for a bounded workstream such as a blocked dependency path, a defined group of services, container and CI/CD changes, missing regression coverage or release preparation.
Work begins by isolating a workstream that can progress with limited domain onboarding and agreeing its repositories, acceptance criteria, first production-relevant deliverable and handover point. The client’s technical leads retain architectural control, while Blocshop carries the agreed work through implementation, testing and production release.
Blocshop’s .NET and Azure work for BCC, for example, began with a defined checkout project and developed into a long-term engagement that included migrating legacy e-commerce systems to a microservices architecture. Where repeated changes across many repositories justify it, the same team can add a controlled AI migration process while senior developers remain responsible for the accepted result.
Is one unresolved workstream now threatening the 10 November deadline or displacing your product delivery? Book a consultation with Blocshop and bring the blocker consuming the most senior engineering time.
Together, we will determine whether Blocshop can take responsibility for it with limited domain onboarding, what the first production deliverable should be and what evidence would mark it complete, giving you a concrete scope before you decide whether to proceed.
Learn more from our insights
