如果我們的.NET Framework應用程式本身年齡夠大,是一座屎山難以修複,.NET 5确是一種采用當今最先進材料建構的現代綠色住宅,.NET 更新助手 能讓我們的遷移工作輕松一些,它也不是萬能的,沒辦法幫助我們把系統搞的更好,在我們遷移的過程中還是需要進行一些手動工作的。
.NET 更新助手是一款可以在不同類型的 .NET Framework 應用上運作的指令行工具。 它旨在幫助将 .NET Framework 應用更新到 .NET 5。 在運作此工具後,大多數情況下,應用将需要更多操作才能完成遷移。 此工具會安裝可以幫助完成遷移的分析器。
它執行下列任務:
添加有助于更新的分析器
确定要更新的項目以及更新順序
将你的項目檔案更新為 SDK 格式
将你的項目重新定位到 .NET 5
将 NuGet 包依賴項更新為與 .NET 5 相容的版本,并删除存在于 .NET 5 中的傳遞依賴項 <code>packages.config</code>
進行 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
該工具還依賴于<code>try-convert</code>将項目檔案轉換為 SDK 格式的工具。您必須有版本<code>0.7.212201</code>或更高版本才能使用更新助手。
在指令行下運作以下指令以安裝 .NET 更新助手。(它是一個全局工具,是以您可以在任何地方運作該指令。)
如果已經安裝<code>try-convert</code>但需要更新到較新版本,請執行以下指令:
我們現在已準備好安裝 .NET 更新助手。為此,請從終端執行以下指令:
首先,我将從我的終端運作以下指令。(預設指令就可以工作,但是,如果需要,您可以傳遞其他參數,例如<code>--verbose</code>.)

第八步是更新Razor 檔案,修複Razor 檔案裡面的代碼
就這個例子來說,該步驟首先删除任何<code>using</code>引用 .NET Framework 命名空間的語句,例如<code>System.Web</code>. 然後,它確定我的<code>ActionResult</code>調用來自<code>Microsoft.AspNetCore.Mvc</code>命名空間。最後,更新助手確定我不使用ASP.NET Core 不支援的<code>HttpContext.Current</code> 。
最後一步是評估下一個項目。由于我們的解決方案隻有一個項目,是以該工具退出。
現在工具已經幫我們完成大部分的遷移工作了,最後一步就是要我們手動修複剩餘的問題了。仍然需要整理一些東西。大多數這些問題涉及 ASP.NET Core 如何處理啟動、配置和捆綁。
<code></code><code></code>在ASP.NET Core不再需要<code>Global.asax</code>和<code>Global.asax.cs檔案,</code> ASP.NET Core的<code>Startup.cs</code>依賴注入模式<code>替換了全球應用程式事件模型</code>。
您不需要的<code>App_Start</code>檔案夾或其中的任何檔案(<code>BundleConfig.cs</code>,<code>FilterConfig.cs</code>和<code>RouteConfig.cs</code>),繼續把它删除了。
執行此操作後,您剩下的大部分錯誤都與靜态資源的捆綁有關。ASP.NET Core 可與多種捆綁解決方案配合使用。閱讀捆綁文檔并選擇最适合您的項目的方法。
最後,解決任何仍然存在的問題。這個示例的變化很小。例如,在我的<code>_Layout.cshtml</code>檔案中,我們必須注入一個<code>IHttpContextAccessor</code>來通路<code>HttpContext.Session</code>并且我還需要清理一些<code>ActionResult</code>響應。
雖然更新助手可以滿足您的大部分用例,但它有一個可選的輔助功能模型,允許您自定義更新步驟,而無需自己修改工具。例如,您可以将NuGet軟體包顯式映射到其替換版本,添加自定義模闆檔案并添加自定義更新步驟。
首先,您将包含一個<code>ExtensionManifest.json</code>檔案,該檔案定義工具在何處找到不同的擴充項。您需要一個清單,但以下所有元素都是可選的,是以您可以僅定義您需要的内容,具體請參考文檔 https://github.com/dotnet/upgrade-assistant/blob/main/docs/extensibility.md 。
歡迎大家掃描下面二維碼成為我的客戶,為你服務和上雲