共用方式為


從 ASP.NET 增量更新至 ASP.NET Core

將應用程式從 ASP.NET Framework 更新為 ASP.NET Core,對大多數生產應用程式而言並不簡單。 這些應用程式通常會在新技術可供使用時納入,而且通常由許多舊版決策所組成。 本文提供將 ASP.NET Framework 應用程式更新至 ASP.NET Core 的工具指引和連結,盡可能少變更。

其中一個較大的挑戰是在整個程式碼庫中普遍使用 HttpContext。 如果沒有累加方法和工具,則需要大規模重寫,才能移除 HttpContext 相依性。 dotnet/systemweb-adapters 中的配接器 提供一組執行階段輔助工具,使您可以存取 ASP.NET Framework 應用程式中使用的類型,並且在 ASP.NET Core 中僅需進行最少的變更即可運作。

根據所使用的應用程式大小、相依性和非可攜式 API,完整移轉可能需要相當多的努力。 為了在進行更新時將應用程式持續部署至生產階段,最佳模式是遵循 Strangler Fig 模式Strangler Fig 模式 允許在舊系統上持續開發,並採用累加方法,以新的服務取代特定功能片段。 本文件說明如何將 Strangler Fig 模式套用至更新至 ASP.NET Core 的 ASP.NET 應用程式。

如果您想略過此概覽文章直接開始,請參閱 開始

將應用程式移轉至 ASP.NET Core

開始移轉之前,應用程式會以 ASP.NET Framework 為目標,並在 Windows 上執行其支援連結庫:

開始移轉之前

遷移過程首先會推出基於 ASP.NET Core 的新應用程式,該應用程式成為進入點。 傳入請求會發送到 ASP.NET Core 應用程式,其會處理請求或透過 YARP將請求代理傳送到 .NET Framework 應用程式。 起初,提供回應的大部分程式代碼都位於 .NET Framework 應用程式中,但現在已設定 ASP.NET Core 應用程式以開始移轉路由:

開始更新路由

若要移轉依賴 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 應用程式更多的路由:

ASP.NET Core 應用程式會處理更多路由

當 ASP.NET Framework 應用程式不再需要時,將其刪除:

  • 應用程式正在 ASP.NET Core 應用程式堆疊上執行,但仍使用配接器。
  • 剩餘的移轉工作是移除轉接器的使用。

最終圖片

Visual Studio 擴充功能 .NET Upgrade Assistant 可協助將 ASP.NET Framework Web 應用程式升級至 ASP.NET Core。 如需詳細資訊,請參閱部落格文章 使用Visual Studio升級 .NET專案

System.Web 配接器

Microsoft.AspNetCore.SystemWebAdapters 命名空間是一個執行階段輔助程式集合,旨在協助使用針對 System.Web 撰寫的程式碼,同時過渡到 ASP.NET Core。 可使用一些套件來利用這些配接器的功能。

  • 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+ 為目標,旨在為 ASP.NET Core 應用程式提供服務,以設定 System.Web API 的行為,並選擇加入任何增量移轉的行為。 通常預期這不會從函式庫中參考,而是從應用程式本身參考。
  • Microsoft.AspNetCore.SystemWebAdapters.Abstractions:此套件是支援套件,可為 ASP.NET Core 和 ASP.NET Framework 應用程式所使用的服務提供抽象概念,例如會話狀態串行化。

如需此用途的案例範例,請參閱 配接器一文

如需使用方式的指引,請參閱 使用指引一文

其他資源