Inkrementelles ASP.NET-zu-ASP.NET Core-Update
Das Aktualisieren einer App von ASP.NET Framework auf ASP.NET Core ist für den Großteil der Produktions-Apps nicht trivial. Diese Apps enthalten häufig neue Technologien, sobald sie verfügbar sind und häufig aus vielen Legacyentscheidungen bestehen. Dieser Artikel enthält Anleitungen und Links zu Tools zum Aktualisieren ASP.NET Framework-Apps auf ASP.NET Core mit so wenig Änderung wie möglich.
Eine der größeren Herausforderungen ist die pervasive Verwendung von HttpContext in einer Codebasis. Ohne den inkrementellen Ansatz und die Tools ist ein groß angelegtes Umschreiben erforderlich, um die HttpContext Abhängigkeit zu entfernen. Die Adapter in dotnet/systemweb-adapters bieten eine Reihe von Laufzeithilfen, um auf die Typen zuzugreifen, die in ASP.NET Framework-Anwendungen verwendet werden, so dass sie in ASP.NET Core mit minimalen Änderungen funktionieren.
Eine vollständige Migration kann je nach Größe der verwendeten App, Abhängigkeiten und nicht portablen APIs erhebliche Anstrengungen unternehmen. Um eine App weiterhin in der Produktion bereitzustellen, während am Update gearbeitet wird, wird am besten das Strangler Fig-Muster befolgt. Das Strangler Fig-Muster ermöglicht eine kontinuierliche Entwicklung auf dem alten System mit einem inkrementellen Ansatz, um bestimmte Funktionalitäten durch neue Dienste zu ersetzen. In diesem Dokument wird beschrieben, wie Sie das Strangler Fig-Muster auf eine ASP.NET App anwenden, die auf ASP.NET Core aktualisiert wird.
Wenn Sie diesen Übersichtsartikel überspringen und loslegen möchten, lesen Sie Erste Schritte.
App-Migration zu ASP.NET Core
Bevor Sie die Migration starten, zielt die App auf ASP.NET Framework ab und wird unter Windows mit den unterstützenden Bibliotheken ausgeführt:
Die Migration beginnt mit der Einführung einer neuen App basierend auf ASP.NET Core, die zum Einstiegspunkt wird. Eingehende Anforderungen gehen an die ASP.NET Core-App, die entweder die Anforderung selbst bearbeitet oder sie über YARPan die .NET Framework-App weiterleitet. Zunächst befindet sich der Großteil des Codes, der Antworten bereitstellt, in der .NET Framework-App, aber die ASP.NET Core-App ist jetzt so eingerichtet, dass Sie mit der Migration von Routen beginnen:
beginnen
Um Geschäftslogik zu migrieren, die auf HttpContext
basiert, müssen die Bibliotheken mit Microsoft.AspNetCore.SystemWebAdapters
erstellt werden. Das Erstellen der Bibliotheken mit SystemWebAdapters
ermöglicht Folgendes:
- Die Bibliotheken, die für .NET Framework, .NET Core oder .NET Standard 2.0 erstellt werden sollen.
- Stellt sicher, dass die Bibliotheken APIs verwenden, die sowohl für ASP.NET Framework als auch für ASP.NET Core verfügbar sind.
Nachdem die ASP.NET Core-App mit YARP eingerichtet wurde, können Sie mit dem Aktualisieren von Routen von ASP.NET Framework auf ASP.NET Core beginnen. Beispiel: WebAPI- oder MVC-Controlleraktionsmethoden, Handler oder eine andere Implementierung einer Route. Wenn die Route in der ASP.NET Core-App verfügbar ist, wird sie abgeglichen und bedient.
Während des Migrationsprozesses werden zusätzliche Dienste und Infrastruktur identifiziert, die für die Ausführung auf .NET Core aktualisiert werden müssen. Zu den in der Reihenfolge der Wartungsbarkeit aufgeführten Optionen gehören:
- Verschiebe den Code in freigegebene Bibliotheken
- Verknüpfen des Codes im neuen Projekt
- Duplizieren des Codes
Schließlich verarbeitet die ASP.NET Core-App mehr Routen als die .NET Framework-App:
Sobald die ASP.NET Framework-App nicht mehr benötigt und gelöscht wird:
- Die App wird im ASP.NET Core-App-Stapel ausgeführt, verwendet aber weiterhin die Adapter.
- Die verbleibende Migrationsarbeit besteht darin, die Verwendung von Adaptern zu beseitigen.
Die Visual Studio-Erweiterung .NET Upgrade Assistant kann beim Upgrade ASP.NET Framework-Web-Apps auf ASP.NET Core helfen. Weitere Informationen finden Sie im Blogbeitrag Aktualisieren Ihrer .NET-Projekte mit Visual Studio.
System.Web Adapter
Der Microsoft.AspNetCore.SystemWebAdapters
-Namespace ist eine Sammlung von Laufzeit-Hilfsfunktionen, die die Verwendung von Code erleichtern, der für System.Web
geschrieben wurde, beim Übergang zu ASP.NET Core. Es gibt einige Pakete, die verwendet werden können, um Features aus diesen Adaptern zu verwenden:
Microsoft.AspNetCore.SystemWebAdapters
: Dieses Paket wird in unterstützenden Bibliotheken verwendet und stellt die System.Web-APIs bereit, von denen Sie möglicherweise eine Abhängigkeit genommen haben, z. B.HttpContext
und andere. Dieses Paket ist auf .NET Standard 2.0, .NET 4.5+ und .NET 6+ ausgerichtet.Microsoft.AspNetCore.SystemWebAdapters.FrameworkServices
: Dieses Paket zielt nur auf .NET Framework ab und soll Dienste für ASP.NET Framework-Anwendungen bereitstellen, die möglicherweise inkrementelle Migrationen bereitstellen müssen. Es wird in der Regel nicht erwartet, dass von Bibliotheken darauf verwiesen wird, sondern von den Anwendungen selbst.Microsoft.AspNetCore.SystemWebAdapters.CoreServices
: Dieses Paket zielt nur auf .NET 6+ ab und soll Dienste für ASP.NET Core-Anwendungen bereitstellen, um das VerhaltenSystem.Web
APIs zu konfigurieren und alle Verhaltensweisen für die inkrementelle Migration zu aktivieren. Es wird in der Regel nicht erwartet, dass von Bibliotheken darauf verwiesen wird, sondern von den Anwendungen selbst.Microsoft.AspNetCore.SystemWebAdapters.Abstractions
: Dieses Paket ist ein unterstützendes Paket, das Abstraktionen für Dienste bereitstellt, die sowohl von der ASP.NET Core- als auch ASP.NET Framework-Anwendung wie der Serialisierung des Sitzungszustands verwendet werden.
Beispiele für Szenarien, in denen dies nützlich ist, finden Sie im Artikel zu Adaptern.
Anleitungen zur Verwendung finden Sie im Artikel Verwendungsleitfaden.