次の方法で共有


ASP.NET から ASP.NET Core への段階的な更新

ASP.NET Framework から ASP.NET Core にアプリを更新することは、大半の運用アプリにとって簡単ではありません。 これらのアプリは、多くの場合、利用可能になると新しいテクノロジが組み込まれます。また、多数のレガシの決定事項で構成されていることがよくあります。 この記事では、できるだけ少ない変更で ASP.NET Framework アプリを ASP.NET Core に更新するためのツールに関するガイダンスとリンクを紹介します。

大きな課題の 1 つは、コード ベース全体での HttpContext の広範な使用です。 段階的アプローチとツールなしでは、HttpContext の依存関係を削除するために大規模な再書き込みが必要になります。 dotnet/systemweb-adapters のアダプターは、一連のランタイム ヘルパーです。これらを使用すると、最小限の変更で ASP.NET Core において機能する方法で、ASP.NET Framework アプリで使用される型にアクセスできます。

アプリのサイズ、依存関係、使用する移植不可能な API によっては、完全な移行にかなりの労力を要する場合があります。 更新に取りかかっている間に継続してアプリを運用環境にデプロイするためには、Strangler Fig パターンに従うことが最適なパターンです。 Strangler Fig パターンを使用すると、特定の機能を新しいサービスと置き換える段階的アプローチで、古いシステムでの継続的な開発が可能になります。 このドキュメントでは、ASP.NET Core に更新する ASP.NET アプリに対して Strangler Fig パターンを適用する方法について説明します。

この概要記事をスキップして作業を開始したい場合は、作業を開始するためのページを参照してください。

ASP.NET Core へのアプリの移行

移行を開始する前に、アプリで ASP.NET Framework を対象に設定し、サポート ライブラリを使って Windows 上で実行します。

Before starting the migration

移行は、エントリ ポイントとなる ASP.NET Core をベースとした新しいアプリを導入することから始まります。 受信要求は、この ASP.NET Core アプリに送信されます。このアプリでは、要求を処理するか、YARP を介して .NET Framework アプリに要求をプロキシします。 初めは、応答を提供するコードの大部分が .NET Framework アプリにありますが、ASP.NET Core アプリはルートの移行を開始するように設定されています。

start updating routes

HttpContext に依存するビジネス ロジックを移行するには、Microsoft.AspNetCore.SystemWebAdapters を使用してライブラリを構築する必要があります。 SystemWebAdapters を使用してライブラリを構築すると、次のことが可能になります。

  • .NET Framework、.NET Core、.NET Standard 2.0 に対してライブラリを構築する。
  • ライブラリで ASP.NET Framework と ASP.NET Core の両方で利用可能な API が使用されていることを確認する。

Microsoft.AspNetCore.SystemWebAdapters

YARP を使用する ASP.NET Core アプリを設定したら、ASP.NET Framework から ASP.NET Core へのルートの更新を開始できます。 たとえば、WebAPI または MVC コントローラーのアクション メソッド、ハンドラー、ルートのその他の実装などです。 ルートが ASP.NET Core アプリで利用可能な場合は、マッチしてサービスが提供されます。

移行プロセス中に、.NET Core で実行するために更新する必要があるその他のサービスとインフラストラクチャが特定されます。 保守容易性の順に示したオプションは次のとおりです。

  1. コードを共有ライブラリに移行する
  2. 新しいプロジェクトでコードをリンクする
  3. コードを複製する

最終的に、ASP.NET Core アプリでは、.NET Framework アプリよりも多くのルートを処理します。

the ASP.NET Core app handles more of the routes

ASP.NET Framework アプリが不要になり、削除されると、次のようになります。

  • アプリは ASP.NET Core アプリ スタックで実行されていますが、引き続きアダプターが使用されています。
  • 残りの移行作業では、アダプターの使用を削除します。

final pic

Visual Studio 拡張機能 .NET Upgrade Assistant は、ASP.NET Framework Web アプリを ASP.NET Core にアップグレードするのに役立ちます。 詳細については、ブログ記事「Visual Studio を使用した .NET プロジェクトのアップグレード」を参照してください。

System.Web アダプター

Microsoft.AspNetCore.SystemWebAdapters 名前空間は、ASP.NET Core への移行中に System.Web に対して記述されたコードの使用を容易にするランタイム ヘルパーのコレクションです。 これらのアダプターの機能を使うために使用できるいくつかのパッケージは、次のとおりです。

  • Microsoft.AspNetCore.SystemWebAdapters: このパッケージは、ライブラリのサポートで使用されるほか、依存関係を取ったと思われる System.Web API (HttpContext など) を提供します。 このパッケージは、.NET Standard 2.0、.NET 4.5 以降、.NET 6 以降を対象としています。
  • Microsoft.AspNetCore.SystemWebAdapters.FrameworkServices: このパッケージは .NET Framework のみを対象としており、段階的移行を実施する必要があると思われる ASP.NET Framework アプリケーションにサービスを提供することを目的としています。 通常、これはライブラリからではなく、アプリケーション自体から参照されることが想定されています。
  • Microsoft.AspNetCore.SystemWebAdapters.CoreServices: このパッケージは .NET 6 以降のみを対象としており、System.Web API の動作や段階的移行の動作へのオプトインを構成するために ASP.NET Coreアプリケーションへサービスを提供することを目的としています。 通常、これはライブラリからではなく、アプリケーション自体から参照されることが想定されています。
  • Microsoft.AspNetCore.SystemWebAdapters.Abstractions: このパッケージは、セッション状態のシリアル化など、ASP.NET Core および ASP.NET Framework アプリケーションの両方で使用されるサービスの抽象化を行うサポート パッケージです。

これが役立つシナリオの例については、アダプターに関する記事を参照してください。

使用に関するガイダンスについては、使用ガイダンスの記事を参照してください。

その他のリソース