Important
開始之前:本文假設您已閱讀 ASP.NET Core 移轉概觀。 如果您尚未閱讀,請從那裡開始了解增量遷移的概念、方法和優點。
針對大型移轉,我們建議您設置一個 ASP.NET Core 應用程式以作為 Proxy,代理到原始的 .NET Framework 應用程式。 下圖顯示已啟用新 Proxy 的應用程式:
本文提供在瞭解方法後繼續進行累加移轉的實用步驟。
Prerequisites
在開始增量移轉之前,請確定您擁有:
- 閱讀概觀:漸進 ASP.NET 到 ASP.NET Core 移轉
- 您想移轉的ASP.NET Framework 運作中應用程式
- Visual Studio 2022 具有最新更新
- 已安裝 .NET 8 或更新版本的 SDK
- 了解應用程式的相依性和 第三方程式庫
移轉步驟概觀
累加式移轉程式遵循下列關鍵步驟:
設定 ASP.NET Core 專案
第一步是建立新的 ASP.NET Core 應用程式作為您的代理。
你會做什麼:
- 在現有的 ASP.NET Framework 應用程式旁邊建立新的 ASP.NET Core 專案
- 請將其設定為使用 YARP (Yet Another Reverse Proxy) 將請求代理到您的原始應用程式。
- 設定累加式移轉的基本基礎結構
Detailed instructions:
- 請參閱 遠端應用程式設定 ,以瞭解如何設定應用程式以進行累加式移轉。
- 請參閱 瞭解從 ASP.NET MVC、Web API 和 Web Forms 升級至 ASP.NET Core, 以取得使用 Visual Studio 工具設定累加移轉所需專案的說明。
解決技術欠債
何時執行此步驟: 在升級任何支援程式庫之前,請先解決可能使移轉程式複雜化的技術債務。
在開始升級支援庫之前,請務必清除可能干擾移轉過程的技術債務。 應先完成此步驟,以確保更流暢的升級體驗。
更新套件依賴項
檢閱您的 NuGet 套件並將其更新為最新的相容版本:
-
稽核現有的套件:使用 Visual Studio 的 NuGet 套件管理員,因為
dotnetCLI 不適用於 ASP.NET Framework 應用程式 - 以增量方式更新套件:一次更新一個套件以避免相容性問題
- 每次更新後測試: 確保您的應用程式在每次套件更新後仍能正常運作
- 解決不相容變更:某些套件更新可能會引入不相容變更需要處理
現代化構建工具
更新您的建置工具和專案設定:
- 更新工具:請確定您使用的是最新版本的 MSBuild/Visual Studio
-
移轉至 PackageReference 用於相依性管理:在 Web 應用程式專案中,如果您尚未從
packages.config格式移轉至PackageReference格式,請考慮移轉。 - 清除未使用的參考:移除任何未使用的元件參考或 NuGet 套件
- 遷移到 SDK 樣式的項目文件: 將您現有的項目文件轉換為現代 SDK 樣式格式。 這對於與現代 .NET 專案的相容性至關重要,並提供更好的工具支援
- 更新構建腳本: 審查和更新任何自定義構建腳本或 CI/CD 配置
解決程式碼品質問題
修正可能使移轉複雜化的已知程式碼品質問題:
- 修復編譯器警告: 解決任何編譯器警告,尤其是與已棄用 API 相關的警告
- 刪除死程式碼:清理未使用的類別、方法和其他程式碼元素
- 更新已棄用的 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:
- 從分葉相依性開始:從解決方案中其他程式庫沒有相依性的程式庫開始
- 沿著相依性樹狀結構向上處理:在程式庫的所有相依性都成功升級之後,才升級程式庫
- 以主應用程式結束:主 ASP.NET 框架應用程式應該是最後一個要修改的項目
此排序至關重要,因為:
- 它可確保當您升級程式庫時,其所有相依性都已相容
- 它可以防止升級過程中的循環依賴性問題
- 它允許您在移動到其依賴庫之前獨立測試每個庫
注意事項: 您只需按照此先後順序操作,處理目前遷移的路由所需的程式庫子集,而不是整個解決方案。
每個庫的升級過程:
如果您的解決方案中有支援程式庫需要用於移轉的路由,應該在可能的情況下將其升級至 .NET Standard 2.0。 升級小幫手是此升級的絕佳工具。 如果程式庫無法以 .NET Standard 為目標,您可以將 .NET 8 或更新版本與原始專案中的 .NET Framework 目標一起鎖定,或與原始專案一起在新專案中。
System.Web 配接器可以用於這些程式庫中,以便在類別程式庫中啟用HttpContext的使用支援。 若要啟用在程式庫中使用 HttpContext:
- 移除專案檔中對
System.Web的參考 - 新增
Microsoft.AspNetCore.SystemWebAdapters套件 - 啟用多重目標並新增 .NET 8 目標或更新版本,或將專案轉換為 .NET Standard 2.0。
此步驟可能需要變更許多專案,視您的解決方案結構和您要移轉的路由而定。 升級小幫手可以協助您識別哪些專案需要變更,並將流程中的一些步驟自動化。
Next Steps
完成上述設定和程式庫升級步驟後:
- 從小處著手:先移轉簡單的無狀態端點
- 徹底測試:確保每個遷移的元件在兩個環境中都能正常運作
- 監控效能:觀察代理設定對效能的任何影響
- 反覆處理:繼續以累加方式移轉元件,直到移轉完成為止