使用 .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 <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文件,该文件定义工具在何处找到不同的扩展项。您需要一个清单,但以下所有元素都是可选的,因此您可以仅定义您需要的内容。
使用 .NET 升级助手将.NET Framework应用迁移到.NET 5的更多相关文章
- C# 利用.NET 升级助手将.NET Framework项目升级为.NET 6
概述 .NET6 正式版本已经发布有一阵子了,今天我就体验一下如何将.NET Framework的项目升级为.NET 6. 升级条件: Windows 操作系统 .NET 6 SDK Visual ...
- PostgreSQL Entity Framework 自动迁移
1.依次添加NuGet包 EntityFramework.Npgsql.EntityFramework6.Npgsql,会自动生成一些配置文件,不过缺少数据库驱动的配置节点: <system.d ...
- Mysql 该如何 Entity Framework 数据库迁移 和 如何更好的支持EntityFramework.Extended
问题 1.在使用EntityFramework访问Mysql的时候,使用迁移来生成数据库或者更新数据库时候会遇到一些问题 2.EntityFramework.Extended对Mysql的支持不是很完 ...
- entity framework自动迁移
第一步,建立测试项目,普通的WinForm类型,EntityMigration: 第二步,从NuGet为项目添加MySql.Data.Entity,由Oracle提供,我选择人气高的: 第三步,建立实 ...
- Entity Framework数据库迁移
1.启用数据迁移: enable-Migrations2.增加一条数据库迁移指令:add-Migrations 必须带上一个版本名称,比如AddUsernamePassword完整的指令:add-Mi ...
- Entity Framework Core 迁移命令
Add-Migration init Update-Database init 修改model后,执行迁移的命令 更新数据库 每次更新都要{update}修改 Add-Migration {updat ...
- 在Visual Studio中将现有.NET Framework项目迁移至.NET Core 1.1 Preview 1
1)下载安装包含 .NET Core 1.1 Preview 1 的 SDK:Windows x64 安装包(下载地址列表) 2)下载最新 VS 2015 NuGet 插件:https://dist. ...
- 全自动迁移数据库的实现 (Fluent NHibernate, Entity Framework Core)
在开发涉及到数据库的程序时,常会遇到一开始设计的结构不能满足需求需要再添加新字段或新表的情况,这时就需要进行数据库迁移. 实现数据库迁移有很多种办法,从手动管理各个版本的ddl脚本,到实现自己的mig ...
- .net core 2.0学习笔记(三):度量.net framework 迁移到.net core的工作量
把现有的.net framework程序迁移到.net core上,是一个非常复杂的工作,特别是一些API在两个平台上还不能同时支持.两个类库的差异性,通过人工很难识别全.好在微软的工程师们考虑到了我 ...
随机推荐
- inline®ister
inline关键字: 内联只是一个请求,不代表编译器会响应:同时某些编译器会将一些函数优化成为内联函数. C++在类内定义的函数默认是内联函数,具体是否真变成内联函数还需看编译器本身. registe ...
- 网络编程NIO之Reactor线程模型
目录 单Reactor线程模型 基于工作线程的Reactor线程模型 多Reactor线程模型 多Reactor线程模型示例 结束语 上篇文章中写了一些NIO相关的知识以及简单的NIO实现示例,但是示 ...
- 网络编程之BIO和NIO
目录 OSI网络七层模型 TCP/UDP协议 TCP消息头 TCP三次握手.四次挥手 UDP协议 TCP协议/UDP协议区别 HTTP协议 HTTP协议请求头 HTTP协议响应头 HTTP状态码 so ...
- JAVAEE_Servlet_01_Servlet基础概念
Servlet 基础概念 Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间 ...
- Day11_49_HashTable
HashTable * HashTable是较早期的使用Hash算法的一种容器结构,现在基本已被淘汰,单线程多使用HashMap,多线程使用ConcurrentHashMap. * HashTable ...
- json 标准库
1. 序列化的简单概念 2. json 标准库 2.1 json.dumps() 2.2 json.loads() 2.3 json.dump() 2.4 json.load() 1. 序列化的简单概 ...
- 善用k8s explain
使用kubectl explain来快速了解用法 例如 kubectl explain deployment.spec 或 kubectl explain deployment.spec.strate ...
- 2021软工-CSDN APP分析
项目 内容 这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 案例分析作业要求 我在这个课程的目标是 提升软件开发能力,提高团队协作能力 这个作业在哪个具体方面 ...
- 0-0 Linux安装在VMvare虚拟机上
一.安装VMware虚拟机: 双击, 上面一步会提示你输入密钥,你只要双击这个,复制里面的一串码粘贴进去就可以. 点击完成,至此VM虚拟机安装完成. 二.在VMvare虚拟机上安装centos. 1. ...
- Linux 究级基础入门命令整理
Linux 究级基础入门命令整理 条条框框,三三两两,怎讷个这么多,哈哈!no zuo no die. 纯粹个人菜鸟笔记,望大神笑纳! 后续,未完!! 查看系统信息 uname -a - 查看内核/操 ...
