使用 .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.csStartup.csappsettings.jsonappsettings.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.asaxGlobal.asax.cs文件, ASP.NET Core的Startup.cs 依赖注入模式替换了全球应用程序事件模型

  • 您不需要的App_Start文件夹或其中的任何文件(BundleConfig.csFilterConfig.csRouteConfig.cs),继续把它删除了。

  • 执行此操作后,您剩下的大部分错误都与静态资源的捆绑有关。ASP.NET Core 可与多种捆绑解决方案配合使用。阅读捆绑文档并选择最适合您的项目的方法。

  • 最后,解决任何仍然存在的问题。这个示例的变化很小。例如,在我的_Layout.cshtml文件中,我们必须注入一个IHttpContextAccessor来访问HttpContext.Session并且我还需要清理一些ActionResult响应。

虽然升级助手可以满足您的大部分用例,但它有一个可选的辅助功能模型,允许您自定义升级步骤,而无需自己修改工具。例如,您可以将NuGet软件包显式映射到其替换版本,添加自定义模板文件并添加自定义升级步骤。

首先,您将包含一个ExtensionManifest.json文件,该文件定义工具在何处找到不同的扩展项。您需要一个清单,但以下所有元素都是可选的,因此您可以仅定义您需要的内容,具体请参考文档 https://github.com/dotnet/upgrade-assistant/blob/main/docs/extensibility.md 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/302096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 逐行写入csv_go|使用go读写CSV文件

生成CSV文件package mainimport ("encoding/csv""log""os")var data [][]string{{"tom", "18", "beijing"}, {"jon", "19", "shanghai"}}func main() {file, err : os.Create(&qu…

用android ndk编译ffmpeg,AndroidNDK交叉编译FFMPEG

1. 简介在进行安卓音视频开发时&#xff0c;利用安卓NDK工具交叉编译FFmpeg&#xff0c;生成可供安卓平台调用的FFmpeg库是最基础的工作。本篇文章介绍了利用NDK进行FFmpeg编译的具体过程&#xff0c;以及如何在Linux和windows系统下交叉编译出适用于不同安卓平台的FFmpeg库文件…

第106届印度科学大会:牛顿和爱因斯坦的理论惨遭印度科学家驳斥

全世界只有3.14 % 的人关注了数据与算法之美昨天&#xff0c;一年一度的印度科学大会&#xff08;Indian Science Congress&#xff09;落下了帷幕。第106届印度科学大会的主要成员合影一般来说&#xff0c;这种学术性会议是学者们进行学术交流的最佳时期&#xff0c;而且能参加…

润乾报表分组求和_实现报表数据预先计算

报表应用中&#xff0c;如果数据量较大或计算过程较复杂&#xff0c;往往会导致报表数据源准备过慢&#xff0c;从而影响报表性能。这种情况下可以预先计算报表需要的数据&#xff0c;在呈现时直接引用&#xff0c;使得用户在访问报表时可以迅速地获得响应。一、当前的手段及弊…

“鸭梨”大吗?

大家好&#xff0c;我是Z哥。“今天你卷了吗&#xff1f;”。在这个越来越内卷的时代&#xff0c;我想你可能时不时&#xff0c;甚至经常会觉得压力好大啊&#xff0c;那些来自生活的压力、工作的作压力、社交的压力、……来看看你有下面的这些情况不&#xff1f;如果有的话&am…

android复选按钮,Android的复选框的详细开发案例分析

在本教程中&#xff0c;我们将向您展示如何创建XML文件中的3个复选框&#xff0c;并论证了听者的使用检查–选中或取消选中复选框的状态。P.S这个项目是在Eclipse 3.7开发&#xff0c;并与Android 2.3.3测试。1。自定义字符串Open “res/values/strings.xml” file, add some u…

颠覆传统,仅银行卡大小充电宝,10000mAh可登机,手机党出门随身必备!

说到充电宝&#xff0c;不知道有没有人跟小木有同样的烦恼。5000毫安容量小&#xff0c;不够用。10000毫安容量够用&#xff0c;但又大又笨重&#xff0c;拿在手里充电超累的&#xff0c;还占地方&#xff01;尤其是旅行出差的时候&#xff0c;这种感觉更加明显&#xff0c;权宜…

玩转Github —— Octotree Chrome插件

&#xff08;为了隐私&#xff0c;手动马赛克&#xff09;兄弟萌&#xff0c;好久不见。最近一直在忙着其他的事情&#xff0c;也一直没有公众号的更新&#xff0c;看到了很多小伙伴说不更新了&#xff0c;也是比较惭愧&#xff0c;还是以工作为主的&#xff01;毕竟都是要恰饭…

android 获取app自启动权限状态_央视批手机App权限问题:频繁自启动 搜集个人隐私触目惊心...

近日据央视新闻报道&#xff0c;有网友反映自己手机上安装的App很多存在频繁自启动、访问、读取手机信息的现象。其中一款名为“优学院”的移动教学软件十多分钟读取近25000次手机照片和文件&#xff1b;而腾讯“TIM”一小时内尝试自启动近七千次&#xff0c;并不断尝试读取通讯…

女程序员怀孕7个月坚持上班敲代码

全世界只有3.14 % 的人关注了数据与算法之美在男女比例失调的程序员行业里&#xff0c;程序媛的工作日常是怎么的呢&#xff1f;程序媛遇到bug时是不是有很多程序员帮忙呢&#xff1f;程序媛对加班有什么看法呢&#xff1f;女生当程序媛好不好呢&#xff1f;下面一起来看看作者…

大数据的关键技术

在大数据时代&#xff0c;传统的数据处理方法还适用吗&#xff1f; 大数据环境下的数据处理需求 大数据环境下数据来源非常丰富且数据类型多样&#xff0c;存储和分析挖掘的数据量庞大&#xff0c;对数据展现的要求较高&#xff0c;并且很看重数据处理的高效性和可用性。 传统数…

adf盖怎么打开_罐头好吃盖难开,学会这几招,再不靠蛮力了,女生也轻松拧开...

家里储备的罐头怎么开&#xff1f;学会这几招&#xff0c;不用蛮力&#xff0c;女生也轻松拧开。这段时期家里肯定储备了很多罐头食品&#xff0c;像水果罐头、腌菜罐头、果酱、调料酱罐头等等&#xff0c;家里的青菜水果不足了&#xff0c;可以临时用罐头食品顶上几天&#xf…

在 Ubuntu 上安装 .NET SDK 或 .NET 运行时

在wsl Ubuntu 20.04上面安装dotnet链接https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-ubuntuUbuntu 支持 .NET。本文介绍如何在 Ubuntu 上安装 .NET。如果 Ubuntu 版本不受支持&#xff0c;则该版本不再支持 .NET。如果要开发 .NET 应用&#xff0c;请安装 SDK&…

skype linux 安装,Ubuntu 12.04 AMD64 安装 Skype

每次安装新版总是有些问题。一个个来解决。1&#xff1a; sudo apt-get install ia32-libs lib32asound2 libqt4-core libqt4-gui2&#xff1a; wget -O skype_Ubuntu-current_amd64.deb http://www.skype.com/go/getskype-linux-beta-ubuntu-643&#xff1a; sudo dpkg -i sky…

在学术论文投稿时你遇到过最奇葩的审稿意见是什么?

全世界只有3.14 % 的人关注了数据与算法之美论文投稿时&#xff0c;总会收到点奇葩审稿意见。就连大名鼎鼎的爱因斯坦也被美国《物理评论》期刊的审稿人怼过&#xff0c;审稿人认为文章的内容和结论存在严重问题&#xff0c;附上了 10 页审稿意见。物理大佬爱因斯坦当然不干了&…

WPF Treeview第三层横向排列

WPF 第三级横向排列效果&#xff0c;左侧使用WrapPanel&#xff0c;右侧使用StackPanel,效果见下图&#xff1a;代码如下&#xff1a;Mainwindow的xaml如下:<Window x:Class"WPFDemos.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presen…

联想 android 5.1 root权限,联想A520手机ROOT权限图文教程(附联想A520root工具)

联想A520 ROOT教程&#xff1a;2、将手机USB调试打开;步骤&#xff1a;设置----应用程序----开发-----USB调试设置----应用程序----未知源&#xff0c;后面的勾打上就行;3、打开了USB调试和未知源之后&#xff0c;双击联想A520 ROOT.exe&#xff0c;将它安装到电脑端;安装好后打…

入门深度学习,其实并不难!

深度学习的概念源于人工神经网络的研究&#xff0c;而深度学习的过程就是使用多个处理层对数据进行高层抽象&#xff0c;得到多重非线性变换函数的过程。虽然深度学习的概念看似高大上&#xff0c;让人有种莫名的距离感&#xff0c;实际上它在日常生活中随处可见&#xff0c;比…

Python应用02 Python服务器进化

作者&#xff1a;Vamei 出处&#xff1a;http://www.cnblogs.com/vamei 欢迎转载&#xff0c;也请保留这段声明。谢谢&#xff01; **注意&#xff0c;在Python 3.x中&#xff0c;BaseHTTPServer, SimpleHTTPServer, CGIHTTPServer整合到http.server包&#xff0c;SocketServer…

天赋差的程序员,难道就只能半途而废吗?

全世界只有3.14 % 的人关注了数据与算法之美在很多人看来&#xff0c;也许优秀的程序员靠的就是与生俱来的强大天赋&#xff0c;外加蜻蜓点水般的时间付出&#xff0c;就能够炼就算无遗漏的编码技能。那么果真是如此吗&#xff1f;身为不太聪明的开发者难道就活该中途止步吗&am…