Migrating from .NET Framework to .NET 8: Realistic Timeline and Scope

August 4, 2026

The official documentation makes migrating from .NET Framework to .NET 8 look mechanical — upgrade the project files, resolve breaking changes, update NuGet packages, done. On a small, well-structured codebase, that's roughly accurate. On a production system with years of accumulated dependencies, it isn't.

Here's what the timeline actually looks like and what determines which end of the range you're on.

What the migration actually involves

This isn't an upgrade in the traditional sense. You're moving from a Windows-only runtime to a cross-platform one, from an IIS-dependent deployment model to a more flexible one, and from a set of APIs that were stable for fifteen years to a substantially evolved platform.

The core work involves converting project files to SDK-style format, resolving removed or changed APIs, replacing NuGet packages that don't have .NET Core equivalents, updating deployment configuration, and validating that the application behaves identically after migration. That last item is usually where the time goes.

What makes it take longer than expected

System.Web dependencies. Any code that depends on System.Web — which includes ASP.NET Web Forms, HttpContext in older patterns, and a range of authentication and session APIs — requires the most work. These don't have drop-in replacements. They require rethinking how the functionality is implemented, not just updating a namespace.

Third-party packages without .NET Core equivalents. NuGet packages that haven't been updated for .NET Core compatibility are common in older codebases. Some have modern equivalents; others have been abandoned. Replacing them isn't always straightforward, especially when the package handles something the application depends on heavily.

Windows-specific code. Code that calls Windows APIs directly — COM interop, registry access, Windows services using older patterns — requires additional work, or an explicit decision to keep the deployment Windows-only and work around the cross-platform restrictions.

Lack of test coverage. Migrations on codebases without automated test coverage require manual regression testing across the full application. This is time-consuming and less reliable. On a complex application, it can add weeks.

Realistic timeline ranges

A small application — under 50k lines, minimal System.Web usage, current third-party dependencies, reasonable test coverage: two to four weeks.

A medium application — active business logic, some System.Web usage, a mix of current and older dependencies: one to three months.

A large or complex application — heavy System.Web usage, legacy package dependencies, Windows-specific integrations, significant manual testing required: three to six months, sometimes more, often alongside partial refactoring to make the migration tractable.

These ranges assume a developer with prior .NET migration experience. A team doing their first migration should expect to be at the higher end.

What to do before you start

Before committing to a timeline, spend a few days understanding what you're working with: how many projects are in the solution, which ones use System.Web, what the external dependencies are, and what test coverage exists.

This assessment takes a few days and tells you which range you're in. It also identifies whether any of the migration can be staged — migrating class libraries and business logic separately from the web layer, for instance — which reduces risk on larger codebases.

Going into a .NET Framework migration without that baseline is how teams commit to a two-month timeline and land at five.

When migration is the right investment

If your .NET Framework application is stable, well-understood, and isn't actively being developed, migration may not be the right use of resources. .NET Framework is not going away — it ships with Windows and will continue receiving security updates. The case for migration is strongest when you need features only available in .NET 8, when cross-platform deployment matters, or when the application is under active development and the team needs access to the modern tooling and performance improvements.

Migration for its own sake is not a good use of resources. The question to answer first is what specific problem the migration solves for your organization.


Working through a problem like this?

Describe the system and where it's stuck. I'll tell you what the work actually involves.

Get in touch