Aggiornamento incrementale di ASP.NET a ASP.NET Core

L'aggiornamento di un'app da ASP.NET Framework a ASP.NET Core non è semplice per la maggior parte delle app di produzione. Queste app spesso incorporano nuove tecnologie man mano che diventano disponibili e sono spesso composte da molte decisioni legacy. Questo articolo fornisce indicazioni e collegamenti agli strumenti per aggiornare le app di ASP.NET Framework per ASP.NET Core con il minor numero possibile di modifiche.

Una delle sfide più grandi è l'uso diffuso di HttpContext in tutta una codebase. Senza l'approccio incrementale e gli strumenti, è necessaria una riscrittura su larga scala per rimuovere la HttpContext dipendenza. Gli adapter in dotnet/systemweb-adapters forniscono un set di helper di runtime per accedere ai tipi usati nell'app ASP.NET Framework in modo che funzioni in ASP.NET Core con modifiche minime.

Una migrazione completa può richiedere notevoli sforzi a seconda delle dimensioni dell'app, delle dipendenze e delle API non portabili usate. Per continuare a distribuire un'app nell'ambiente di produzione durante l'aggiornamento, il modello migliore consiste nel seguire il modello Strangler Fig. Il modello Strangler Fig consente di sviluppare continuamente sul vecchio sistema con un approccio incrementale per sostituire parti specifiche di funzionalità con nuovi servizi. Questo documento descrive come applicare il modello Strangler Fig a un'app ASP.NET aggiornando verso ASP.NET Core.

Per ignorare questo articolo di panoramica e iniziare, vedere Introduzione.

Migrazione di app a ASP.NET Core

Prima di avviare la migrazione, l'app è destinata a ASP.NET Framework ed eseguita in Windows con le librerie di supporto:

Before starting the migration

La migrazione inizia introducendo una nuova app basata su ASP.NET Core che diventa il punto di ingresso. Le richieste in ingresso passano all'app ASP.NET Core, che gestisce la richiesta o esegue il proxy della richiesta all'app .NET Framework tramite YARP. Inizialmente, la maggior parte del codice che fornisce risposte si trova nell'app .NET Framework, ma l'app ASP.NET Core è ora configurata per avviare la migrazione delle route:

start updating routes

Per eseguire la migrazione della logica di business basata su HttpContext, le librerie devono essere compilate con Microsoft.AspNetCore.SystemWebAdapters. Compilazione delle librerie con SystemWebAdapters consente:

  • Librerie da compilare in .NET Framework, .NET Core o .NET Standard 2.0.
  • Assicura che le librerie usino API disponibili sia in ASP.NET Framework che in ASP.NET Core.

Microsoft.AspNetCore.SystemWebAdapters

Dopo aver configurato l'app ASP.NET Core usando YARP, è possibile avviare l'aggiornamento delle route da ASP.NET Framework a ASP.NET Core. Ad esempio, metodi di azione del controller WebAPI o MVC, gestori o altre implementazioni di una route. Se la route è disponibile nell'app ASP.NET Core, viene abbinata e servita.

Durante il processo di migrazione vengono identificati servizi e infrastrutture aggiuntivi che devono essere aggiornati per l'esecuzione in .NET Core. Le opzioni elencate in ordine di gestibilità includono:

  1. Spostare il codice in librerie condivise
  2. Collegare il codice nel nuovo progetto
  3. Duplicare il codice

Infine, l'app ASP.NET Core gestisce più route rispetto all'app .NET Framework:

the ASP.NET Core app handles more of the routes

Dopo che l'app ASP.NET Framework non è più necessaria ed eliminata:

  • L'app è in esecuzione nello stack di app core ASP.NET, ma sta ancora usando gli adattatori.
  • Il lavoro di migrazione rimanente rimuove l'uso degli adattatori.

final pic

L'estensione .NET Upgrade Assistant di Visual Studio consente di aggiornare le app Web di ASP.NET Framework a ASP.NET Core. Per altre informazioni, vedere il post di blog Aggiornamento dei progetti .NET con Visual Studio.

System.Web Adapters

Lo Microsoft.AspNetCore.SystemWebAdapters spazio dei nomi è una raccolta di helper di runtime che facilitano l'uso del codice scritto System.Web in durante lo spostamento in ASP.NET Core. Esistono alcuni pacchetti che possono essere usati per usare le funzionalità di questi adattatori:

  • Microsoft.AspNetCore.SystemWebAdapters: questo pacchetto viene usato nelle librerie di supporto e fornisce le API System.Web da cui potrebbe essere stata acquisita una dipendenza, ad esempio HttpContext e altri. Questo pacchetto è destinato a .NET Standard 2.0, .NET 4.5+e .NET 6+.
  • Microsoft.AspNetCore.SystemWebAdapters.FrameworkServices: questo pacchetto è destinato solo a .NET Framework ed è progettato per fornire servizi alle applicazioni di ASP.NET Framework che potrebbero dover fornire migrazioni incrementali. Questo non è in genere previsto che venga fatto riferimento dalle librerie, ma piuttosto dalle applicazioni stesse.
  • Microsoft.AspNetCore.SystemWebAdapters.CoreServices: questo pacchetto è destinato solo a .NET 6+ ed è progettato per fornire servizi alle applicazioni ASP.NET Core per configurare il comportamento delle System.Web API e acconsentire esplicitamente a eventuali comportamenti per la migrazione incrementale. Questo non è in genere previsto che venga fatto riferimento dalle librerie, ma piuttosto dalle applicazioni stesse.
  • Microsoft.AspNetCore.SystemWebAdapters.Abstractions: questo pacchetto è un pacchetto di supporto che fornisce astrazioni per i servizi usati sia dall'applicazione ASP.NET Core che da ASP.NET Framework, ad esempio la serializzazione dello stato della sessione.

Per esempi di scenari in cui questa opzione è utile, vedere l'articolo sulle schede.

Per indicazioni sull'utilizzo, vedere l'articolo sulle linee guida sull'utilizzo.

Risorse aggiuntive