If I need to upgrade .NET 8 to .NET 10, I treat the work as an API contract migration, not a project-file edit. A service can compile, pass unit tests, and still surprise consumers with a changed JSON shape, status code, authentication response, or OpenAPI document.

That risk matters now because Microsoft has confirmed that .NET 8 and .NET 9 reach end of support on November 10, 2026. .NET 10 and C# 14 are the current stable releases, and .NET 10 is the supported LTS destination.

Why the deadline changes my upgrade order

My first step is inventory, not retargeting. I list every deployable project, test project, global.json, container base image, CI SDK pin, and Microsoft package reference. dotnet --list-sdks shows what a machine can build; dotnet --info shows what the current environment actually resolves.

If that inventory needs more detail, my older guide to dotnet sdk check is a useful starting point. For APIs still on .NET 8, the broader Web API setup and security checklist can help identify behavior worth protecting before the move.