共用方式為


開始使用從 ASP.NET 到 ASP.NET Core 的累加式移轉

Important

開始之前:本文假設您已閱讀 ASP.NET Core 移轉概觀。 如果您尚未閱讀,請從那裡開始了解增量遷移的概念、方法和優點。

針對大型移轉,我們建議您設置一個 ASP.NET Core 應用程式以作為 Proxy,代理到原始的 .NET Framework 應用程式。 下圖顯示已啟用新 Proxy 的應用程式:

開始移轉路由

本文提供在瞭解方法後繼續進行累加移轉的實用步驟。

Prerequisites

在開始增量移轉之前,請確定您擁有:

  1. 閱讀概觀:漸進 ASP.NET 到 ASP.NET Core 移轉
  2. 您想移轉的ASP.NET Framework 運作中應用程式
  3. Visual Studio 2022 具有最新更新
  4. 已安裝 .NET 8 或更新版本的 SDK
  5. 了解應用程式的相依性和 第三方程式庫

移轉步驟概觀

累加式移轉程式遵循下列關鍵步驟:

  1. 設定核心專案 ASP.NET
  2. 補救技術債務
  3. 識別並解決跨領域問題
  4. 升級支援程式庫

設定 ASP.NET Core 專案

第一步是建立新的 ASP.NET Core 應用程式作為您的代理。

你會做什麼:

  • 在現有的 ASP.NET Framework 應用程式旁邊建立新的 ASP.NET Core 專案
  • 請將其設定為使用 YARP (Yet Another Reverse Proxy) 將請求代理到您的原始應用程式。
  • 設定累加式移轉的基本基礎結構

Detailed instructions:

解決技術欠債

何時執行此步驟: 在升級任何支援程式庫之前,請先解決可能使移轉程式複雜化的技術債務。

在開始升級支援庫之前,請務必清除可能干擾移轉過程的技術債務。 應先完成此步驟,以確保更流暢的升級體驗。

更新套件依賴項

檢閱您的 NuGet 套件並將其更新為最新的相容版本:

  1. 稽核現有的套件:使用 Visual Studio 的 NuGet 套件管理員,因為 dotnet CLI 不適用於 ASP.NET Framework 應用程式
  2. 增量方式更新套件:一次更新一個套件以避免相容性問題
  3. 每次更新後測試: 確保您的應用程式在每次套件更新後仍能正常運作
  4. 解決不相容變更:某些套件更新可能會引入不相容變更需要處理

現代化構建工具

更新您的建置工具和專案設定:

  1. 更新工具:請確定您使用的是最新版本的 MSBuild/Visual Studio
  2. 移轉至 PackageReference 用於相依性管理:在 Web 應用程式專案中,如果您尚未從packages.config格式移轉至PackageReference格式,請考慮移轉。
  3. 清除未使用的參考:移除任何未使用的元件參考或 NuGet 套件
  4. 遷移到 SDK 樣式的項目文件: 將您現有的項目文件轉換為現代 SDK 樣式格式。 這對於與現代 .NET 專案的相容性至關重要,並提供更好的工具支援
  5. 更新構建腳本: 審查和更新任何自定義構建腳本或 CI/CD 配置

解決程式碼品質問題

修正可能使移轉複雜化的已知程式碼品質問題:

  1. 修復編譯器警告: 解決任何編譯器警告,尤其是與已棄用 API 相關的警告
  2. 刪除死程式碼:清理未使用的類別、方法和其他程式碼元素
  3. 更新已棄用的 API 使用方式:盡可能將已棄用 API 的使用方式替換為其現代對等的 API

這項準備工作將使函式庫升級過程更加順暢,並減少在遷移過程中遇到複雜問題的可能性。

識別並解決跨領域問題

何時執行此步驟: 在補救技術債務時,但在升級支援程式庫之前,請識別並設定影響整個應用程式的跨領域關注點。

橫切面關注點是指應用程式中涵蓋多個層或元件的面向,例如驗證、會話管理、日誌記錄和快取。 這些問題需要在移轉程序的早期解決,因為它們會影響 ASP.NET Framework 和 ASP.NET Core 應用程式在累加移轉期間通訊和共用狀態的方式。

以下各節涵蓋最常見的跨領域問題。 僅設定適用於應用程式的項目:

會話支援配置

如果您的 ASP.NET Framework 應用程式使用 Session 狀態,請設定此設定。

請參閱一般工作階段移轉文件以取得指引。

Session 是 ASP.NET 的常用功能,它與 ASP.NET Core 中的功能共享名稱,但 API 有很大不同。 升級使用工作階段狀態的程式庫時,您必須設定工作階段支援。 請參閱 遠端工作階段支援 的檔,以取得如何在應用程式之間啟用工作階段狀態共用的詳細指引。

Authentication Configuration

如果出現以下情況,請設定此專案: 您的 ASP.NET Framework 應用程式會使用鑑別,而且您想要在舊應用程式和新應用程式之間共用鑑別狀態。

請參閱一般 驗證移轉文件以取得指引。

您可以使用 System.Web 配接器遠端驗證功能,在原始 ASP.NET 應用程式與新的 ASP.NET Core 應用程式之間共用驗證。 此功能可讓 ASP.NET Core 應用程式將驗證延遲至原始 ASP.NET 應用程式。 如需詳細資訊,請參閱 遠端驗證 的說明文件。

其他需要考慮的跨領域問題

根據您的申請,您可能還需要解決:

  • 日誌記錄:確保兩個應用程式的日誌記錄一致。 請考慮使用共用記錄提供者,或確保正確匯總記錄。
  • 快取:如果您的應用程式使用快取 (記憶體內、分散式或輸出快取),請規劃如何維護應用程式之間的快取一致性。
  • 錯誤處理:在 ASP.NET Framework 和 ASP.NET Core 應用程式之間建立一致的錯誤處理和報告。
  • 配置管理:規劃如何在兩個應用程式之間共享或管理配置設定。
  • 健康監控:在遷移過程中為兩個應用程式設定監控和健康檢查。
  • 相依性插入:如果在 ASP.NET Framework 應用程式中使用 DI 容器,請規劃移轉至 ASP.NET Core 的內建 DI 容器。

升級支援程式庫

何時執行此步驟: 只有當您需要移轉相依於包含商務邏輯的類別程式庫的特定路由時,才需要在新舊應用程式之間共用。

Note

累加方法:使用累加移轉程序時,您不需要一次升級所有支援的程式庫。 您只需要升級目前正在移轉的特定路由所需的程式庫。 這可讓您以更小、更易於管理的部分來處理移轉。

程式庫升級流程

Important

支援程式庫必須以 後序深度優先搜尋順序進行升級。 This means:

  1. 分葉相依性開始:從解決方案中其他程式庫沒有相依性的程式庫開始
  2. 沿著相依性樹狀結構向上處理:在程式庫的所有相依性都成功升級之後,才升級程式庫
  3. 以主應用程式結束:主 ASP.NET 框架應用程式應該是最後一個要修改的項目

此排序至關重要,因為:

  • 它可確保當您升級程式庫時,其所有相依性都已相容
  • 它可以防止升級過程中的循環依賴性問題
  • 它允許您在移動到其依賴庫之前獨立測試每個庫

注意事項: 您只需按照此先後順序操作,處理目前遷移的路由所需的程式庫子集,而不是整個解決方案。

每個庫的升級過程:

如果您的解決方案中有支援程式庫需要用於移轉的路由,應該在可能的情況下將其升級至 .NET Standard 2.0。 升級小幫手是此升級的絕佳工具。 如果程式庫無法以 .NET Standard 為目標,您可以將 .NET 8 或更新版本與原始專案中的 .NET Framework 目標一起鎖定,或與原始專案一起在新專案中。

System.Web 配接器可以用於這些程式庫中,以便在類別程式庫中啟用HttpContext的使用支援。 若要啟用在程式庫中使用 HttpContext

  1. 移除專案檔中對 System.Web 的參考
  2. 新增 Microsoft.AspNetCore.SystemWebAdapters 套件
  3. 啟用多重目標並新增 .NET 8 目標或更新版本,或將專案轉換為 .NET Standard 2.0。

此步驟可能需要變更許多專案,視您的解決方案結構和您要移轉的路由而定。 升級小幫手可以協助您識別哪些專案需要變更,並將流程中的一些步驟自動化。

Next Steps

完成上述設定和程式庫升級步驟後:

  1. 從小處著手:先移轉簡單的無狀態端點
  2. 徹底測試:確保每個遷移的元件在兩個環境中都能正常運作
  3. 監控效能:觀察代理設定對效能的任何影響
  4. 反覆處理:繼續以累加方式移轉元件,直到移轉完成為止