Upgrading from .NET 8 to .NET 10: A Practical Checklist
Why upgrade now November 10, 2026 is the end-of-support date for both .NET 8 and .NET 9. Your apps keep running after that date, but they stop receiving security patches, so every new vulnerability stays open. The target is .NET 10, the current LTS release, supported until November 2028 ( Microsoft .NET Blog ). The good news: for most apps on modern .NET this is a days-long job, not a months-long…
Upgrading from .NET 8 to .NET 10: A Practical Checklist
End-of-support for .NET 8 and .NET 9 is on November 10, 2026. Transition to the current LTS release, .NET 10, which will be supported until November 2028. Upgrading is a relatively quick process for most modern .NET applications, not a months-long endeavor. Most breaking changes are targeted and documented, often surfacing as compiler warnings.
Before beginning the upgrade, take an inventory of all deployable projects, test projects, and shared libraries. Pin every version in global.json, Dockerfiles, CI pipeline SDK versions, and build scripts. Check what your machine and pipeline resolve by running dotnet --list-sdks and dotnet --info. Update dependencies by running dotnet list package --outdated and test the suite on the current version to create a known-good baseline for comparison.
The upgrade process involves the following steps:
1. Pin the .NET 10 SDK and update global.json with { "sdk": { "version": "10.0.100", "rollForward": "latestFeature" } }
2. Change the target framework in every project to net10.0 or use a centralized Directory.Build.props file. Upgrade shared libraries first, then dependent apps. Multi-target if necessary.
3. Update Microsoft packages to 10.0.x versions to ensure alignment.
4. Restore and review the new warnings, as dotnet restore now audits transitive packages by default. Expect vulnerability warnings and NuGet to flag direct references it can prune.
5. Build with warnings as errors to quickly identify issues with obsolete APIs and deprecated functionality.
6. Run tests and the application, comparing the results to your baseline. Many changes are behavioral, so ensure integration tests are executed with real configuration and payloads.
Common breaking changes in web apps coming from .NET 8 include the obsolescence of WebHostBuilder, IWebHost, and WebHost, which should be moved to WebApplication.CreateBuilder or the generic host. IActionContextAccessor and ActionContextAccessor are also obsolete; switch to IHttpContextAccessor. The WithOpenApi() extension method is deprecated, and Razor runtime compilation is no longer supported.
Update ASP.NET Core to use build-time compilation and Hot Reload. Adapt to changes in forwarded headers, cookie login redirects, Blazor response streaming, and JSON Patch. Update EF Core 10, rewrite hand-built expression trees, and handle C# 14 field ambiguities. Ensure default SIGTERM handlers are added for graceful shutdown, and adjust background service execution. Address container and CI/CD changes, including Dockerfile updates and container image changes.
When migrating from .NET Framework, convert old-style .csproj files to SDK-style and packages.config to PackageReference. Update configuration files, hosting, startup, dependency injection, and other framework-specific changes.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.