Upgrading a Production API from .NET 8 to .NET 10: What Broke A production ASP.NET Core Web API was moved from .NET 8 to .NET 10 LTS ahead of the November 10, 2026 end-of-support date for both .NET 8 and .NET 9, and the migration surfaced mostly loud build errors plus two silent failures, according to a Softinbit Technology case study. The loud breaks included obsolete IPNetwork, Swashbuckle 10 and EF Core 10 ExecuteUpdate changes, while the silent ones were a missing exception log that muted an error-rate alert and 401 responses where tests expected cookie redirects. The case study, which states the company, people and details are invented, pins SDK 10.0.100 in global.json, targets net10.0 via Directory.Build.props and centralizes package versions including Microsoft.AspNetCore.Authentication.JwtBearer 10.0.14, Microsoft.EntityFrameworkCore.SqlServer 10.0.14 and Swashbuckle.AspNetCore 10.3.1, the latest as of October 25, 2026, when .NET 10.0.14 and 8.0.33 shipped as an out-of-band security update. Note: this article was drafted with AI assistance and reviewed by Softinbit Technology before publishing. It is part of the series The .NET Field Guide . TL;DR — .NET 8 and .NET 9 both lose support on November 10, 2026. This case study moves a production API straight to .NET 10 LTS and walks through every break the team hit. — Most breaks were loud build errors obsolete IPNetwork, Swashbuckle 10, EF Core 10 ExecuteUpdate . Two were silent: a missing exception log that muted an alert, and 401s where tests expected cookie redirects. - You get before/after code for each fix, a temporary net8.0/net10.0 CI matrix, and a checklist to run on your own project. Level: Advanced · Prerequisites: ASP.NET Core Web API and EF Core experience, basic Docker and CI · Reading time: 13 min This is an illustrative case study. It combines situations that are common in production .NET systems. The company, people, and details are invented, and no numbers are presented as real measurements unless they come from the demo code in this article. The ticket looked harmless: “Move Store.Api to .NET 10.” Elif, the team lead, attached one line from Microsoft’s support policy page. .NET 8 and .NET 9 both reach end of support on November 10, 2026. After that date there are no more security patches, and the security team would start flagging the API in every audit. Kerem opened the first pull request on a Monday. He changed net8.0 to net10.0, pushed, and watched CI turn red. By Thursday the build was green again, the staging deploy looked healthy, and the error-rate alert had gone completely quiet. That silence turned out to be the most dangerous break of all. Store.Api is the backend for a mid-size Turkish e-commerce company: an ASP.NET Core Web API with controllers, Entity Framework Core EF Core on SQL Server, and JSON Web Tokens JWT for the storefront. A small back office reports area uses a separate cookie scheme named BackOffice. The API runs in Docker behind a load balancer, so it relies on forwarded headers. Swagger UI comes from Swashbuckle 6 with a JWT security definition and one operation filter. CI builds with TreatWarningsAsErrors. The support dates, from the official .NET support policy page: Skipping .NET 9 was an easy call, because it loses support on the same day as .NET 8. Waiting for .NET 11 made no sense either: it is expected in November 2026 as a standard-term support STS release, with two years of patches instead of the three an LTS gets. The plan had five mechanical steps before any code changes. Pin the SDK in global.json at the repository root: { "sdk": { "version": "10.0.100", "rollForward": "latestFeature" }} Change the target framework in one place, Directory.Build.props: