如果我们的.NET Framework应用程序本身年龄够大,是一座屎山难以修复,.NET 5确是一种采用当今最先进材料构建的现代绿色住宅,.NET 升级助手 能让我们的迁移工作轻松一些,它也不是万能的,没办法帮助我们把系统搞的更好,在我们迁移的过程中还是需要进行一些手动工作的。
.NET 升级助手是一款可以在不同类型的 .NET Framework 应用上运行的命令行工具。 它旨在帮助将 .NET Framework 应用升级到 .NET 5。 在运行此工具后,大多数情况下,应用将需要更多操作才能完成迁移。 此工具会安装可以帮助完成迁移的分析器。
它执行下列任务:
packages.config
该工具目前支持下列 .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 升级助手之前,您必须确保安装好下列工具:
该工具还依赖于try-convert
将项目文件转换为 SDK 格式的工具。您必须有版本0.7.212201
或更高版本才能使用升级助手。
在命令行下运行以下命令以安装 .NET 升级助手。(它是一个全局工具,因此您可以在任何地方运行该命令。)
dotnet tool install -g try-convert
如果已经安装try-convert
但需要升级到较新版本,请执行以下命令:
dotnet tool update -g try-convert
我们现在已准备好安装 .NET 升级助手。为此,请从终端执行以下命令:
dotnet tool install -g upgrade-assistant
安装 .NET 升级助手后,切换到解决方案所在的文件夹并输入以下命令来运行它。
upgrade-assistant upgrade <MySolution.sln>
首先,我将从我的终端运行以下命令。(默认命令就可以工作,但是,如果需要,您可以传递其他参数,例如--verbose
.)
upgrade-assistant upgrade eShopDotNet5MVC.sln
该工具执行并向我们显示它将执行的步骤。对于流程中的每个步骤,我们可以应用流程中的下一步、跳过它、查看详细信息或配置日志记录。大多数情况下,您需要选择Apply next step。为了节省一些时间,您可以按回车来执行此操作。
当该工具启动时,它会在项目的根目录中放置一个日志文件log.txt
第一步是备份项目。.NET 升级助手会询问您是要为备份使用自定义路径还是默认位置。完成后,我们就可以转换项目文件了。
ry-convert
工具将你的项目文件转换为该 SDK 格式。在此过程中,我们看到该工具警告我们一些导入,如System.Web
迁移后可能需要手动干预。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 文件里面的代码
[Complete]
.就这个例子来说,该步骤首先删除任何using
引用 .NET Framework 命名空间的语句,例如System.Web
. 然后,它确保我的ActionResult
调用来自Microsoft.AspNetCore.Mvc
命名空间。最后,升级助手确保我不使用ASP.NET Core 不支持的HttpContext.Current
。
最后一步是评估下一个项目。由于我们的解决方案只有一个项目,因此该工具退出。
现在工具已经帮我们完成大部分的迁移工作了,最后一步就是要我们手动修复剩余的问题了。仍然需要整理一些东西。大多数这些问题涉及 ASP.NET Core 如何处理启动、配置和捆绑。
Global.asax
和Global.asax.cs文件,
ASP.NET Core的Startup.cs
依赖注入模式替换了全球应用程序事件模型
。App_Start
文件夹或其中的任何文件(BundleConfig.cs
,FilterConfig.cs
和RouteConfig.cs
),继续把它删除了。_Layout.cshtml
文件中,我们必须注入一个IHttpContextAccessor
来访问HttpContext.Session
并且我还需要清理一些ActionResult
响应。虽然升级助手可以满足您的大部分用例,但它有一个可选的辅助功能模型,允许您自定义升级步骤,而无需自己修改工具。例如,您可以将NuGet软件包显式映射到其替换版本,添加自定义模板文件并添加自定义升级步骤。
首先,您将包含一个ExtensionManifest.json
文件,该文件定义工具在何处找到不同的扩展项。您需要一个清单,但以下所有元素都是可选的,因此您可以仅定义您需要的内容,具体请参考文档 https://github.com/dotnet/upgrade-assistant/blob/main/docs/extensibility.md 。