Migrating from .NET Framework to .NET 8: A Step-by-Step Roadmap
Randall Clapper

by Randall Clapper

19 Jun, 2025

Migrating from .NET Framework to .NET 8: A Step-by-Step Roadmap

Why Migrate to .NET 8?

If you're running a .NET Framework 4.x application, you're on borrowed time. Microsoft has shifted all active development to .NET 8+, and while Framework apps will continue to run, they're missing out on:

  • 3-5x performance improvements in web workloads
  • Cross-platform deployment (Linux containers, ARM)
  • Modern C# features (records, pattern matching, nullable reference types)
  • Long-term support through 2026 and beyond

But migration isn't just about running dotnet upgrade. Here's the roadmap we use with our clients.


Phase 1: Assessment (1-2 weeks)

Before writing any code, you need to understand what you're working with.

1. Inventory Your Dependencies

Run the .NET Upgrade Assistant in analysis mode:

upgrade-assistant analyze <your-solution.sln>

This generates a report showing:

  • NuGet packages that need updates or replacements
  • APIs that don't exist in .NET 8
  • Project types that need conversion

2. Identify Blockers

Common blockers we see:

  • WCF services - Replace with gRPC or REST APIs
  • System.Web dependencies - Move to ASP.NET Core middleware
  • Windows-only APIs - Use compatibility shims or refactor
  • Entity Framework 6 - Migrate to EF Core (usually straightforward)

3. Map Your Risk

Not all code is equal. Identify:

  • Critical paths that can't break
  • Low-risk modules to migrate first
  • Integration points with external systems

Phase 2: Preparation (2-4 weeks)

1. Update to .NET Framework 4.8

If you're on an older Framework version, update first. This gets you closer to .NET 8 APIs and shakes out compatibility issues early.

2. Add Tests

You can't safely migrate what you can't verify. Focus on:

  • Integration tests for critical business flows
  • API contract tests for external interfaces
  • Smoke tests for the happy path

3. Modernize Incrementally

Before the big migration:

  • Replace HttpWebRequest with HttpClient
  • Switch to dependency injection patterns
  • Remove static state where possible

Phase 3: Migration (4-8 weeks)

The Strangler Fig Pattern

Don't try to migrate everything at once. Instead:

  1. Create a new .NET 8 project alongside your existing app
  2. Route traffic through the new app (reverse proxy or API gateway)
  3. Migrate endpoints one at a time, testing each
  4. Retire the old app once everything is moved

Migration Order

We typically migrate in this order:

  1. Shared libraries and utilities
  2. Data access layer
  3. Business logic
  4. API controllers/endpoints
  5. Background jobs
  6. UI (if applicable)

Phase 4: Validation (1-2 weeks)

Performance Baseline

Before going live, establish:

  • Response time percentiles (p50, p95, p99)
  • Memory usage under load
  • Database query performance

Compare against your .NET Framework baseline. You should see improvements.

Rollback Plan

Always have one. Options include:

  • Blue-green deployment with instant cutover
  • Feature flags to route traffic back
  • Database compatibility (don't break schema for old app)

Common Pitfalls

"We'll just upgrade in place" - This rarely works for complex apps. The strangler fig pattern is slower but safer.

"Tests can wait" - They can't. Migration without tests is migration with production bugs.

"We need to refactor everything" - Resist the urge. Migrate first, refactor later. Changing behavior during migration makes debugging impossible.


Need Help?

We've migrated dozens of .NET Framework applications to .NET 8. If you're staring at a legacy codebase and don't know where to start, book a free 30-minute assessment and we'll help you build a roadmap.