使用 .NET 升级助手将.NET Framework应用迁移到.NET 5
從.NET Framework 遷移到.NET 5 猶如搬家,我們都知道搬家是很痛苦的,我們請求搬家公司來減輕我們的壓力,.NET 升級助手?的作用就類似我們聘請的搬家公司,幫助我們處理繁重乏味的遷移工作。.NET 升級助手是一個全局命令行工具,可以指導你將.NET Framework應用程序遷移到.NET ?5, 在這個遷移過程中自動執行幾個步驟。.NET升級助手的代碼:?https://github.com/dotnet/upgrade-assistant/
如果我們的.NET Framework應用程序本身年齡夠大,是一座屎山難以修復,.NET 5確是一種采用當今最先進材料構建的現代綠色住宅,.NET 升級助手 能讓我們的遷移工作輕松一些,它也不是萬能的,沒辦法幫助我們把系統搞的更好,在我們遷移的過程中還是需要進行一些手動工作的。
.NET 升級助手是一款可以在不同類型的 .NET Framework 應用上運行的命令行工具。它旨在幫助將 .NET Framework 應用升級到 .NET 5。在運行此工具后,大多數情況下,應用將需要更多操作才能完成遷移。此工具會安裝可以幫助完成遷移的分析器。
它執行下列任務:
添加有助于升級的分析器
確定要升級的項目以及升級順序
將你的項目文件更新為 SDK 格式
將你的項目重新定位到 .NET 5
將 NuGet 包依賴項更新為與 .NET 5 兼容的版本,并刪除存在于 .NET 5 中的傳遞依賴項?packages.config
進行 C# 更新以使用其 .NET 5 等效項替換 .NET Framework 模式
在適當的地方,添加通用模板文件
該工具目前支持下列 .NET Framework 應用類型:
.NET Framework Windows 窗體應用
.NET Framework WPF 應用
.NET Framework ASP.NET MVC 應用
.NET Framework 控制臺應用
.NET Framework 類庫
我們將通過遷移運行 .NET Framework 4.7.2的版本的 ASP.NET MVC 應用eShopLegacyMVCSolution來評估 .NET 升級助手.
我們使用從電子書“使用 Azure 云和 Windows 容器現代化現有 .NET 應用程序”?的代碼??https://github.com/dotnet-architecture/eShopModernizing。
準備工作
在開始使用升級助手之前,請確保您熟悉 Microsoft 的移植文檔并了解遷移限制,尤其是在遷移 ASP.NET 應用程序時。此外,您首先使用.NET Portability Analyzer 工具來了解哪些依賴項支持 .NET 5。這就像在搬家之前打電話給搬家公司了解他們是否可以搬家和不搬家以及可能需要多長時間。
在安裝 .NET 升級助手之前,您必須確保安裝好下列工具:
Visual Studio 2019 16.8 或更高版本(需要 Visual Studio,因為該工具使用 MSBuild 來處理項目文件)
.NET 5 SDK
該工具還依賴于try-convert將項目文件轉換為 SDK 格式的工具。您必須有版本0.7.212201或更高版本才能使用升級助手。
在命令行下運行以下命令以安裝 .NET 升級助手。(它是一個全局工具,因此您可以在任何地方運行該命令。)
dotnet tool install -g try-convert如果已經安裝try-convert但需要升級到較新版本,請執行以下命令:
dotnet tool update -g try-convert安裝 .NET 升級助手
我們現在已準備好安裝 .NET 升級助手。為此,請從終端執行以下命令:
dotnet tool install -g upgrade-assistant安裝 .NET 升級助手后,切換到解決方案所在的文件夾并輸入以下命令來運行它。upgrade-assistant upgrade <MySolution.sln>使用升級助手遷移到 .NET 5
首先,我將從我的終端運行以下命令。(默認命令就可以工作,但是,如果需要,您可以傳遞其他參數,例如--verbose.)
upgrade-assistant upgrade eShopDotNet5MVC.sln該工具執行并向我們顯示它將執行的步驟。對于流程中的每個步驟,我們可以應用流程中的下一步、跳過它、查看詳細信息或配置日志記錄。大多數情況下,您需要選擇Apply next step。為了節省一些時間,您可以按回車來執行此操作。當該工具啟動時,它會在項目的根目錄中放置一個日志文件log.txt第一步是備份項目。.NET 升級助手會詢問您是要為備份使用自定義路徑還是默認位置。完成后,我們就可以轉換項目文件了。第二步是將項目文件轉換為 SDK 樣式,.NET 5 項目使用的是 SDK 格式。在此步驟中,升級助手使用該ry-convert工具將你的項目文件轉換為該 SDK 格式。在此過程中,我們看到該工具警告我們一些導入,如System.Web遷移后可能需要手動干預。
第三步是清理Nuget包的引用關系
第四步是更新TFM,.NET 升級助手會將目標框架名稱 (TFM) 更新為 .NET 5.0。在我的情況下,值從net472更改為net5.0。
第五步是更新 NuGet 包,升級助手更新 TFM 后,它會嘗試更新項目的 NuGet 包。該工具使用分析器來檢測要刪除的引用以及要使用.NET 5版本升級的軟件包。然后,該工具更新包。
第六步是添加模板文件,該工具更新任何 NuGet 包后,它會添加任何相關模板文件。ASP.NET Core 使用模板文件進行配置和啟動。這通常包括Program.cs,Startup.cs,appsettings.json和appsettings.development.json。
第七步是遷移應用程序配置文件,現在升級助手已準備好遷移我們的應用程序配置文件。該工具確定支持哪些設置,然后將任何可配置的設置遷移到我的appSettings.json文件中。完成后,該工具system.web.webPages.razor/pages/namespaces通過_ViewImports.cshtml使用對 的@addTagHelper引用進行更新來遷移Microsoft.AspNetCore.Mvc.TagHelpers。
第八步是更新Razor 文件,修復Razor 文件里面的代碼
第九步是更新 C# 源代碼,.NET升級助手將C#代碼引用升級到其.NET Core 版本。您會在終端中看到列出的幾個步驟 - 并非所有步驟都適用。在這些情況下,它們將被跳過并標記為[Complete].
就這個例子來說,該步驟首先刪除任何using引用 .NET Framework 命名空間的語句,例如System.Web. 然后,它確保我的ActionResult調用來自Microsoft.AspNetCore.Mvc命名空間。最后,升級助手確保我不使用ASP.NET Core 不支持的HttpContext.Current?。
最后一步是評估下一個項目。由于我們的解決方案只有一個項目,因此該工具退出。
現在工具已經幫我們完成大部分的遷移工作了,最后一步就是要我們手動修復剩余的問題了。仍然需要整理一些東西。大多數這些問題涉及 ASP.NET Core 如何處理啟動、配置和捆綁。
在ASP.NET Core不再需要Global.asax和Global.asax.cs文件,?ASP.NET Core的Startup.cs?依賴注入模式替換了全球應用程序事件模型。
您不需要的App_Start文件夾或其中的任何文件(BundleConfig.cs,FilterConfig.cs和RouteConfig.cs),繼續把它刪除了。
執行此操作后,您剩下的大部分錯誤都與靜態資源的捆綁有關。ASP.NET Core 可與多種捆綁解決方案配合使用。閱讀捆綁文檔并選擇最適合您的項目的方法。
最后,解決任何仍然存在的問題。這個示例的變化很小。例如,在我的_Layout.cshtml文件中,我們必須注入一個IHttpContextAccessor來訪問HttpContext.Session并且我還需要清理一些ActionResult響應。
雖然升級助手可以滿足您的大部分用例,但它有一個可選的輔助功能模型,允許您自定義升級步驟,而無需自己修改工具。例如,您可以將NuGet軟件包顯式映射到其替換版本,添加自定義模板文件并添加自定義升級步驟。
首先,您將包含一個ExtensionManifest.json文件,該文件定義工具在何處找到不同的擴展項。您需要一個清單,但以下所有元素都是可選的,因此您可以僅定義您需要的內容,具體請參考文檔?https://github.com/dotnet/upgrade-assistant/blob/main/docs/extensibility.md?。
總結
以上是生活随笔為你收集整理的使用 .NET 升级助手将.NET Framework应用迁移到.NET 5的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# 消息队列之MSMQ
- 下一篇: WPF Treeview第三层横向排列