Inkrementelles Update von ASP.NET zu ASP.NET Core

Das Update einer App von ASP.NET Framework auf ASP.NET Core ist für die meisten Produktions-Apps nicht trivial. Diese Apps integrieren häufig neue Technologien, sobald diese verfügbar werden, und basieren häufig auf vielen Legacyentscheidungen. Dieser Artikel enthält Anleitungen und Links zu Tools zum Aktualisieren ASP.NET Framework-Apps in ASP.NET Core mit möglichst wenig Änderungen.

Eine der größeren Herausforderungen ist die allgegenwärtige Verwendung von HttpContext in einer Codebasis. Ohne den inkrementellen Ansatz und die Tools ist umfangreiches Umschreiben erforderlich, um die HttpContext-Abhängigkeit zu entfernen. Die Adapter in dotnet/systemweb-adapters stellen eine Reihe von Laufzeithilfsprogrammen für den Zugriff auf die in der ASP.NET Framework-App verwendeten Typen auf eine Weise bereit, die in ASP.NET Core mit minimalen Änderungen funktioniert.

Eine vollständige Migration kann je nach App-Größe, Abhängigkeiten und nicht portierbaren verwendeten APIs erheblichen Aufwand bedeuten. 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 Weiterentwicklung des alten Systems mit einem inkrementellen Ansatz, um bestimmte Teile der Funktionalität 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 gleich loslegen möchten, lesen Sie Erste Schritte.

App-Migration zu ASP.NET Core

Bevor die Migration gestartet wird, verwendet die App ASP.NET Framework als Ziel und wird unter Windows mit den zugehörigen unterstützenden Bibliotheken ausgeführt:

Before starting the migration

Die Migration beginnt mit der Einführung einer neuen App, die auf ASP.NET Core basiert, die zum Einstiegspunkt wird. Eingehende Anforderungen werden an die ASP.NET Core-App gesendet, die die Anforderung entweder verarbeitet oder die Anforderung über YARP an 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 mit der Migration von Routen begonnen wird:

start updating routes

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:

  • Erstellen der Bibliotheken für .NET Framework, .NET Core oder .NET Standard 2.0.
  • Sicherstellen, dass die Bibliotheken APIs verwenden, die sowohl für ASP.NET Framework als auch für ASP.NET Core verfügbar sind.

Microsoft.AspNetCore.SystemWebAdapters

Sobald 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. Beispielsweise 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 bereitgestellt.

Während des Migrationsprozesses werden zusätzliche Dienste und Infrastruktur identifiziert, die für die Ausführung unter .NET Core aktualisiert werden müssen. Zu den Optionen, die in der Reihenfolge der Wartbarkeit aufgeführt werden, gehören:

  1. Verschieben des Codes in freigegebene Bibliotheken
  2. Verknüpfen des Codes im neuen Projekt
  3. Duplizieren des Codes

Schließlich verarbeitet die ASP.NET Core-App mehr Routen als die .NET Framework-App:

the ASP.NET Core app handles more of the routes

Sobald die ASP.NET Framework-App nicht mehr benötigt und gelöscht wird:

  • Die App wird auf dem ASP.NET Core App-Stapel ausgeführt, verwendet aber weiterhin die Adapter.
  • Die verbleibenden Migrationsaufgaben bestehen darin, die Verwendung von Adaptern zu entfernen.

final pic

Die Visual Studio-Erweiterung .NET-Upgrade-Assistent kann beim Durchführen eines Upgrades von ASP.NET Framework-Web-Apps auf ASP.NET Core helfen. Weitere Informationen finden Sie im Blogbeitrag Upgrading your .NET projects with Visual Studio.

System.Web-Adapters

Der Microsoft.AspNetCore.SystemWebAdapters-Namespace ist eine Sammlung von Laufzeithilfsprogrammen, die die Verwendung von Code, der für System.Web geschrieben wurde, beim Wechsel zu ASP.NET Core erleichtern. Es gibt einige Pakete, die verwendet werden können, um Features dieser Adapter 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 deklariert haben, z. B. HttpContext und andere. Dieses Paket ist auf .NET Standard 2.0, .NET 4.5 oder höher und .NET 6 oder höher 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 oder höher ab und soll Dienste für ASP.NET Core-Anwendungen bereitstellen, um das Verhalten von System.Web-APIs zu konfigurieren und alle Verhaltensweisen für 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 von ASP.NET Framework-Anwendung verwendet werden, z. B. Serialisierung des Sitzungszustands.

Beispiele für Szenarien, in denen dies nützlich ist, finden Sie im Artikel zu Adaptern.

Anleitungen zur Verwendung finden Sie im Artikel mit Anleitungen zur Verwendung.

Weitere Ressourcen