從 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 上以其支援程式庫執行:
移轉一開始會根據成為進入點的 ASP.NET Core 引進新的應用程式。 傳入要求會移至 ASP.NET Core 應用程式,此應用程式會透過 YARP 處理要求或使用 Proxy 將要求送至 .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。
設定使用 YARP 的 ASP.NET Core 應用程式後,您就可以開始將路由從 ASP.NET Framework 更新為 ASP.NET Core。 例如,WebAPI 或 MVC 控制器動作方法、處理常式,或路由的一些其他實作。 如果路由可在 ASP.NET Core 應用程式中使用,則會進行比對並提供服務。
在移轉過程中,識別出必須更新才能在 .NET Core 上執行的其他服務和基礎結構。 依維護性順序列出的選項包括:
- 將程式碼移至共用程式庫
- 連結新專案中的程式碼
- 複製程式碼
最後,ASP.NET Core 應用程式會處理比 .NET Framework 應用程式更多的路由:
一旦不再需要 ASP.NET Framework 應用程式並予以刪除:
- 應用程式正在 ASP.NET Core 應用程式堆疊上執行,但仍會使用配接器。
- 剩餘的移轉工作正在移除配接器的使用。
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 應用程式所用的服務提供抽象概念,例如工作階段狀態序列化。
如需此套件實用案例的範例,請參閱配接器一文。
如需使用指引,請參閱使用指引一文。