delivered for clients · names withheldmodernization Applications

.NET Framework and .NET 8 to .NET 10

Cohash gets .NET applications onto .NET 10, the current long-term support release. A .NET 8 or 9 app is usually just a retarget, package updates and a test run. With .NET Framework apps we port libraries first, then move ASP.NET to ASP.NET Core, incrementally and side by side if needed. We swap out Windows-only dependencies and containerize where it's worth it. Nothing ships without tests and a rollback.

  1. 01Portfolio scan
  2. 02.NET 8 and 9 retargets first
  3. 03Libraries before applications
  4. 04Incremental web migration
  5. 05Hosting and pipeline
case-study / dotnet-framework-to-modern-dotnet delivered
before.NET Framework 4.x, .NET 8 and .NET 9 apps after.NET 10 LTS
01 · CLIENTS 02 · EDGE 03 · APPLICATIONS ON .NET 10 04 · HOSTING AND CI Browsers: same URLs Browsers same URLs Internal callers: updated clients Internal callers updated clients ASP.NET Core front: routes moved one at a time ASP.NET Core front routes moved one at atime CoreWCF: chosen per caller CoreWCF chosen per caller .NET 10 services: LTS to 14 November 2028 .NET 10 services LTS to 14 November2028 Remaining ASP.NET app: shrinking set of routes Remaining ASP.NETapp shrinking set ofroutes Shared libraries: .NET Standard 2.0 · multi-target Shared libraries .NET Standard 2.0 ·multi-target CI pipeline: builds net10.0 · runtime patches CI pipeline builds net10.0 ·runtime patches Linux containers or App Service: where dependencies allow Linux containers orApp Service where dependenciesallow
case file

The story

Told without the client's name or anything that could identify them.

what happened

A product engineering team ran a mix of .NET 8 services and older .NET Framework 4.x apps with WCF services and Web Forms pages, all on Windows Server VMs. With .NET 8 and 9 reaching end of support on 10 November 2026 and Framework 4.6.2 following on 12 January 2027, security scanners were about to flag both. We scanned the portfolio first and retargeted the .NET 8 and 9 apps to .NET 10 ahead of the November date. The Framework apps then moved library by library, with an ASP.NET Core front taking over endpoints one at a time and each WCF service moved to CoreWCF, gRPC or REST based on its callers.

why it was urgent

The date most teams are working toward is 10 November 2026, when .NET 8 and .NET 9 both reach end of support. .NET 10 LTS is supported to 14 November 2028. Framework apps have their own clock: support for 4.6.2 ends on 12 January 2027. Microsoft has also deprecated .NET Upgrade Assistant and now points people to the GitHub Copilot modernization agent instead.

problem statement
  • openSecurity scanners will start flagging .NET 8 runtimes as unsupported after 10 November 2026.
  • recurringCore business apps still run on .NET Framework 4.x with WCF services and Web Forms pages.
  • blockedNuGet packages pinned years ago block any target framework change.
  • openEverything has to live on Windows Server VMs. That keeps the hosting bill and the patching work high.
architecture

The estate, before and after

before
before

Before: .NET 8 services and Framework apps on Windows VMs

Browsers hit Web Forms pages, and internal callers used WCF SOAP services on .NET Framework 4.x, running next to the .NET 8 and 9 services. It all sat on Windows Server VMs. Pinned NuGet packages and Windows-only APIs got in the way of any framework change.

Before: .NET 8 services and Framework apps on Windows VMs Browsers hit Web Forms pages, and internal callers used WCF SOAP services on .NET Framework 4.x, running next to the .NET 8 and 9 services. It all sat on Windows Server VMs. Pinned NuGet packages and Windows-only APIs got in the way of any framework change. 01 · CLIENTS 02 · APPLICATIONS 03 · HOSTING HTTP WCF SOAP references references deployed to deployed to Windows APIs Browsers Web Forms pages Internal callers SOAP clients .NET Framework 4.x apps System.Web · WCF server .NET 8 and 9 services support ends 10 November2026 Shared libraries pinned NuGet packages Windows Server VMs manual runtime patching Registry and COM Windows-only dependencies
Read the diagram as text
  1. Browsers → .NET Framework 4.x apps: HTTP
  2. Internal callers → .NET Framework 4.x apps: WCF SOAP
  3. .NET Framework 4.x apps → Shared libraries: references
  4. .NET 8 and 9 services → Shared libraries: references
  5. .NET Framework 4.x apps → Windows Server VMs: deployed to
  6. .NET 8 and 9 services → Windows Server VMs: deployed to
  7. .NET Framework 4.x apps → Registry and COM: Windows APIs
after
after

After: .NET 10 apps behind an ASP.NET Core front

Browser traffic now lands on an ASP.NET Core app, which peels routes off the remaining ASP.NET app one by one. The services are on .NET 10 LTS, old WCF callers talk CoreWCF, gRPC or REST, and CI deploys to Linux containers or App Service when the dependencies allow it.

After: .NET 10 apps behind an ASP.NET Core front Browser traffic now lands on an ASP.NET Core app, which peels routes off the remaining ASP.NET app one by one. The services are on .NET 10 LTS, old WCF callers talk CoreWCF, gRPC or REST, and CI deploys to Linux containers or App Service when the dependencies allow it. 01 · CLIENTS 02 · EDGE 03 · APPLICATIONS ON .NET 10 04 · HOSTING AND CI HTTP gRPC or REST migrated routes proxied routes service calls references references runs on deploy Browsers same URLs Internal callers updated clients ASP.NET Core front routes moved one at a time CoreWCF chosen per caller .NET 10 services LTS to 14 November 2028 Remaining ASP.NET app shrinking set of routes Shared libraries .NET Standard 2.0 ·multi-target CI pipeline builds net10.0 · runtimepatches Linux containers or AppService where dependencies allow
Read the diagram as text
  1. Browsers → ASP.NET Core front: HTTP
  2. Internal callers → CoreWCF: gRPC or REST
  3. ASP.NET Core front → .NET 10 services: migrated routes
  4. ASP.NET Core front → Remaining ASP.NET app: proxied routes
  5. CoreWCF → .NET 10 services: service calls
  6. .NET 10 services → Shared libraries: references
  7. Remaining ASP.NET app → Shared libraries: references
  8. .NET 10 services → Linux containers or App Service: runs on
  9. CI pipeline → Linux containers or App Service: deploy
results

What the client got

What changed for the client once the work was done. Described, not scored: we don't publish client figures.

  1. result 01

    Every app targets a supported runtime

    .NET 8 and 9 apps now target net10.0, the LTS release supported to 14 November 2028, with package updates and breaking changes worked through behind tests.

  2. result 02

    Shared libraries serve old and new apps

    We moved class libraries to .NET Standard 2.0 or multi-targeted them. Framework apps kept working the whole time the apps calling them were being ported.

  3. result 03

    Web endpoints moved over one at a time

    An ASP.NET Core app in front of the old ASP.NET app takes over routes incrementally, so each move ships with its own rollback.

  4. result 04

    Each WCF service has a decided replacement

    We moved WCF services to CoreWCF, gRPC or REST based on what their callers needed, and wrote the choice into each app's port plan.

  5. result 05

    Runtime patching is part of normal releases

    CI builds against .NET 10 now. Where dependencies allowed, we moved apps to Linux containers or App Service. Runtime updates ship with the regular release cycle.

what can go wrong

Risks we plan for

  1. System.Web and Web Forms

    ASP.NET Core has nothing that maps straight onto Web Forms. So those pages are either rewritten in Razor Pages or Blazor, or left on Framework with a date for dealing with them.

  2. Third-party packages with no modern build

    Some vendor libraries never shipped for modern .NET. Each one needs a replacement, a wrapper or a conversation with the vendor.

  3. Behavior changes hidden by thin tests

    Framework and .NET have different defaults for serialization, globalization and configuration. If an app has few tests, we write characterization tests before porting it, so we know what it did before.

ai in this move

Where AI helps, and where it needs guardrails

For upgrades, Microsoft now points people at the GitHub Copilot modernization agent in Visual Studio, and AWS Transform has a Windows agent for .NET and SQL Server. They draft plans and code changes fast. We still review every commit and test between steps, and we keep the agents out of production configuration and secrets.

forward deployed engineers →
you keep

What you're left with

We write these for your setup, and they're working documents. Your team should be able to keep things running from them long after we've gone.

  • document01

    Portfolio scan with target, effort drivers and order per solution

    yours to keep
  • document02

    Retargeted .NET 8 and 9 apps on .NET 10

    yours to keep
  • plan03

    Port plan per .NET Framework app, with Web Forms and WCF decisions

    yours to keep
  • tests04

    CI pipelines building and testing against .NET 10

    yours to keep
  • document05

    Runtime patching process tied to Microsoft's monthly releases

    yours to keep
talent and delivery · .net 10 lts

Certified engineers, wherever you need them.

Some clients want a project team, some want a couple of engineers on theirs. Either works. Onsite, nearshore or offshore, with handovers across time zones that keep things moving.

Onsite

Engineers at your sites in the US

Nearshore

Overlapping hours with US teams

Offshore

Overnight progress on your backlog

All time zones

Coverage handed over across time zones

24-hour coverage · US Central time
OnsiteUS business hours
Nearshoreoverlapping US hours
Offshoreovernight progress
Combinedhandover, not hand-off
01Why does .NET 8 end support at the same time as .NET 9?

Microsoft's support policy page lists both ending on 10 November 2026, even though .NET 8 is an LTS release. .NET 10 is the LTS release to target, with support to 14 November 2028.

02Is .NET Framework 4.8 going away?

No separate end date for 4.8 and 4.8.1. They live and die with the Windows version they run on. Older 4.x versions do end, and 4.6.2 goes on 12 January 2027. New features only land in modern .NET.

03How long does a Framework port take?

It depends on how much of the app depends on System.Web, WCF and Windows-only APIs, and how good the test coverage is. A class library can take days and a large Web Forms app much longer. We scan first and size each app.

04Should we rewrite instead?

Rarely all at once. Incremental migration keeps the app running while pieces move. A rewrite makes sense only when the business logic itself needs to change.

sources 4 sources linked last checked 2026-10-20 content fingerprint 085b4781
  1. 01Microsoft: .NET and .NET Core support policydotnet.microsoft.com ↗
  2. 02Microsoft Lifecycle: .NET Frameworklearn.microsoft.com ↗
  3. 03Microsoft Learn: .NET Upgrade Assistant overview (deprecation notice)learn.microsoft.com ↗
  4. 04AWS Transformaws.amazon.com ↗
Reviewed by the Cohash team Product names are trademarks of their owners. how we handle facts and data →
next step

Planning this move?

A 30-minute working session with a senior engineer. No slides.

useful to bring
  • The platform and the version you're on
  • Where you need to get to, and by when
  • What's custom: rules, plugins, integrations
  • Any audit finding or deadline driving it