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 una codebase. Senza l'approccio incrementale e gli strumenti, è necessaria una riscrittura su larga scala per rimuovere la dipendenza HttpContext. Gli adattatori in dotnet/systemweb-adapters forniscono un set di helper di runtime per accedere ai tipi usati nell'app ASP.NET Framework in un 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, è meglio seguire il modello Strangler Fig. Il modello Fig Strangler 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 saltare l'articolo introduttivo e passare direttamente all'inizio, 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:
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:
Per eseguire la migrazione della logica di business basata su HttpContext
, è necessario compilare le librerie con Microsoft.AspNetCore.SystemWebAdapters
. La compilazione delle librerie con SystemWebAdapters
consente di:
- 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.
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:
- Spostare il codice in librerie condivise
- Collegare il codice nel nuovo progetto
- Duplicare il codice
Infine, l'app ASP.NET Core gestisce più route rispetto all'app .NET Framework:
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.
L'estensione di Visual Studio Assistente aggiornamento .NET 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 spazio dei nomi Microsoft.AspNetCore.SystemWebAdapters
è una raccolta di helper di runtime che facilitano l'uso del codice scritto in System.Web
durante il passaggio a 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 è stata acquisita una dipendenza, ad esempioHttpContext
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 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 è destinato a fornire servizi alle applicazioni ASP.NET Core per configurare il comportamento delle APISystem.Web
, nonché acconsentire esplicitamente a eventuali comportamenti per la migrazione incrementale. In genere, non ci si aspetta che le librerie facciano riferimento a questo, ma piuttosto le 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 è utile, vedere l'articolo sugli adattatori.
Per indicazioni sull'utilizzo, vedere l'articolo indicazioni sull'utilizzo.