從 ASP.NET 到 ASP.NET Core 的累加式更新

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

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

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

如果您想要略過本概觀文章並開始使用,請參閱 開始使用

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

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

Before starting the migration

移轉一開始會根據成為進入點的 ASP.NET Core 引進新的應用程式。 傳入要求會移至 ASP.NET Core 應用程式,此應用程式會透過 YARP 處理要求或使用 Proxy 將要求送至 .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 升級小幫手可協助將 ASP.NET Framework Web 應用程式升級為 ASP.NET Core。 如需詳細資訊,請參閱使用 Visual Studio 升級專案部落格文章。

System.Web 配接器

Microsoft.AspNetCore.SystemWebAdapters 命名空間是執行階段協助程式的集合,方便使用針對 System.Web 撰寫的程式碼,同時移至 ASP.NET Core。 有幾個套件可用於使用這些配接器的功能:

  • Microsoft.AspNetCore.SystemWebAdapters:此套件用於支援程式庫,並提供您可能依賴的 System.Web API,例如 HttpContext 和其他 API。 此套件的目標為 .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 應用程式所用的服務提供抽象概念,例如工作階段狀態序列化。

如需此套件實用案例的範例,請參閱配接器一文。

如需使用指引,請參閱使用指引一文。

其他資源