Engineering Practitioner Brief / 18 May 2026

.NET Framework Legacy Cost

Microsoft ended new-feature development for .NET Framework at version 4.8 in 2019. Security patches continue as part of Windows, but the .NET cross-platform line (currently .NET 9, with .NET 10 LTS landing November 2025) is the supported destination. The migration is structurally a port to a different runtime, not a version upgrade, which is why it costs more than the equivalent Spring or Django ladder. This page breaks down the per-component cost.

The Three Cost Tiers by Application Shape

Easy

$40K to $100K

Console apps, libraries, .NET Standard 2.0 friendly, no UI

Medium

$80K to $250K

ASP.NET MVC, Web API, EF6, no WCF server, no WebForms

Hard

$200K to $1M+

WebForms, WCF servers, AppDomain plugins, COM interop

The .NET Upgrade Assistant

Microsoft's .NET Upgrade Assistant handles the mechanical part of the migration well: project file conversion (from packages.config or PackageReference to SDK-style), target framework moniker updates, NuGet package upgrades for known-compatible alternatives, and namespace adjustments. The tool also flags APIs that have no direct .NET equivalent and need substitution.

For a 100K-line ASP.NET MVC application without WebForms or WCF server components, the Upgrade Assistant typically completes its mechanical pass in 4 to 12 engineer-hours. The output is a compiling project on .NET that may or may not run correctly; the runtime verification and behavioural test work is the bulk of the remaining migration effort.


ASP.NET MVC to ASP.NET Core MVC

The cleanest migration in the .NET Framework world. ASP.NET MVC and ASP.NET Core MVC share most of the API surface (controllers, model binding, routing). The differences that matter:

Typical effort for a 100K-line MVC application: 200 to 500 engineer-hours including the dependency-injection refactor and the System.Web removal.


WebForms Exit

The most expensive single component of .NET Framework legacy work. WebForms (server-side controls, ViewState, the page lifecycle, code-behind files) is fundamentally incompatible with .NET's stateless request model. There is no automated migration path. Every WebForms page is a manual rewrite to one of the alternatives.

Effort sizing for a 100-page WebForms application: 1,200 to 3,000 engineer-hours depending on the chosen target. The high end applies to applications with heavy use of server controls and ViewState, which need explicit state-management refactoring.


WCF Service Replacement

.NET does not include WCF server-side support. Three replacement options have emerged:

CoreWCF is a community-maintained .NET-compatible WCF implementation. It supports a meaningful subset of the original WCF surface area, primarily SOAP over HTTP and TCP bindings. For applications that need to maintain existing WCF clients, CoreWCF is the lowest-friction path. Migration effort: 30 to 100 engineer-hours per service for the typical case.

gRPC is the modern equivalent for high-performance internal service-to-service communication. The proto-first contract is a different mental model from WCF's attribute-based contract definition. Migration effort: 80 to 200 engineer-hours per service plus client rewrites.

REST plus OpenAPI is the most common choice for external-facing services. The contract translation is straightforward (WCF DataContracts to JSON DTOs) but client SDKs need to be regenerated. Migration effort: 60 to 150 engineer-hours per service.


IIS to Kestrel and Linux Containers

.NET runs cross-platform, most often on Linux in containers in production. The migration off IIS to Kestrel (the cross-platform Microsoft web server) and Linux containers is the operational half of the .NET Framework to .NET migration. The compute-cost story is favourable: a typical web workload runs at 50 to 70 percent of the equivalent IIS-on-Windows cost when moved to Kestrel on Linux, primarily because of OS license cost differences and better container density.

The engineering cost is in operational rebuild: deployment pipelines, monitoring agents, log shipping, and the runbooks that describe how the application is operated. A team moving from an IIS-managed-by-ops deployment to a Kubernetes-on-Linux deployment is doing two migrations in one. Plan an additional 200 to 500 engineer-hours per application for the operational rebuild, depending on how much of the operational tooling is shared across applications.


AppDomain Removal

.NET Framework supported AppDomain isolation, which allowed loading and unloading plugin assemblies in the same process with isolated memory. .NET removed full AppDomain support. The partial replacement is AssemblyLoadContext, which allows loading and unloading assemblies but does not provide the security isolation that AppDomains did.

Applications that relied on AppDomain isolation for security (sandboxing third-party plugins) need to redesign. The modern equivalent is process-level isolation: each plugin runs in a separate process, communicating via IPC or HTTP. This is more expensive operationally but provides stronger isolation. Migration effort for an AppDomain-heavy application is 400 to 1,500 engineer-hours; this is one of the components that pushes large .NET Framework migrations above the $1M mark.

Related Reading


Frequently Asked Questions

What does .NET Framework to .NET 9 cost?

For a 100K-line ASP.NET MVC app on .NET Framework 4.8, $80K to $200K across 4 to 10 months. WebForms apps cost 2x to 3x more because they require a UI rewrite to Blazor or MVC. WCF service hosts require replacement with gRPC, REST, or CoreWCF. The .NET Upgrade Assistant handles project files and namespace updates well, but does not write new code for retired APIs.

Is .NET Framework still supported?

Yes, with caveats. .NET Framework 4.8 receives security patches as part of Windows. There will be no new versions, no new APIs, and no new features. Microsoft's clear messaging is that .NET (the cross-platform line, currently .NET 9 with .NET 10 LTS due November 2025) is the supported direction.

Should I move to .NET 8 LTS or .NET 9?

.NET 8 LTS for production stability (3-year support from November 2023). .NET 9 (Standard Term Support, 18 months) for projects that need the newer features and can tolerate the upgrade to .NET 10 LTS in late 2025. Most enterprise migrations land on the most-recent LTS at the time the migration completes.

What is the WebForms migration path?

There is no automated WebForms migration. WebForms is fundamentally different from MVC, Razor Pages, and Blazor. The mainstream choices are Blazor Server (closest to the WebForms event-driven model), Blazor WebAssembly, ASP.NET Core MVC, or Razor Pages. Each requires rewriting the UI layer. Effort is typically 50 to 150 percent of the original WebForms development cost.

How do I replace WCF on .NET?

Three options. CoreWCF (community-maintained .NET-compatible WCF) is the lowest-friction path if the existing service contracts are stable. gRPC is the modern equivalent for high-performance internal services. REST plus OpenAPI is the most common choice for new external interfaces. The right choice depends on consumer constraints.

What about the AppDomain isolation pattern?

.NET does not support AppDomains in the .NET Framework sense. Applications that rely on AppDomain isolation for plugin loading need to redesign with AssemblyLoadContext (limited replacement) or with process-level isolation. This is one of the larger architectural breakages in the .NET Framework to .NET migration; plan for non-trivial design work.

Updated 2026-04-27