{
  "id": 19551281,
  "title": "Upgrading from .NET 8 to .NET 10: A Practical Checklist",
  "url": "https://urgent.news/2026/11/11/upgrading-from-net-8-to-net-10-a-practical-checklist",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-11-11T21:07:42.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/jasmin_omanovic/upgrading-from-net-8-to-net-10-a-practical-checklist-5g3g"
  },
  "original_language": "en",
  "account": "Upgrading from .NET 8 to .NET 10: A Practical Checklist\n\nEnd-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.\n\nBefore 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.\n\nThe upgrade process involves the following steps:\n1. Pin the .NET 10 SDK and update global.json with { \"sdk\": { \"version\": \"10.0.100\", \"rollForward\": \"latestFeature\" } }\n2. 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.\n3. Update Microsoft packages to 10.0.x versions to ensure alignment.\n4. 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.\n5. Build with warnings as errors to quickly identify issues with obsolete APIs and deprecated functionality.\n6. 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.\n\nCommon 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.\n\nWhen 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.",
  "summary": "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…",
  "key_points": [
    "End-of-support for .NET 8 and .NET 9 on November 10, 2026",
    "Upgrade to LTS release .NET 10 supported until November 2028",
    "Upgrade process involves pinning .NET 10 SDK, updating global.json, and testing suite"
  ],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}