C# 利用.NET 升级助手将.NET Framework项目升级为.NET 6

概述

.NET6 正式版本已经发布有一阵子了,今天我就体验一下如何将.NET Framework的项目升级为.NET 6.

升级条件:

  • Windows 操作系统

  • .NET 6 SDK

  • Visual Studio 2022 17.0 或更高版本

环境准备

①首先是VS2022下载,直接上微软官方网站,下载地址:

https://visualstudio.microsoft.com/zh-hans/downloads/

85d9eb5ae166ea2a76fc550c16015c94.png

下载后,在线安装就行,如果之前有vs的其它版本也不用卸载,VS可以多个版本共存,安装的时候.NET 6的运行时默认会勾选安装,如下图:

753bcc0fc037a452bf1072a58b3e8e91.png

②如果需要单独下载SDK和运行时,可以上微软官网,地址:

.NET SDKs downloads for Visual Studio (microsoft.com)

cee0ba51549302a7d713557f7bc651f6.png

③安装好以后,可以在window命令窗口确认.NET 6是否安装正常,可以输入:

20c774a00e196e21ca3f28c5ac1ab8f9.png


vs安装完成后,在新建项目时应该已经可以看到.NET 6的框架了

5f6f9f1974ea589cda52dab99c3b4f7b.png

.NET Portability Analyzer安装和使用

      升级前最好先分析下你的项目依赖的类库是否支持最新的.NET平台,这里可以利用扩展工具.NET Portability Analyzer去完成(仅支持.NET 5以下版本):

e76ff9445d40d9ae96e65149fa8b47b3.png

扩展工具下载安装完成后,重启VS。在工程或者解决方案的右键菜单中,选择:Portability Analyzer Settings。在配置页面,选择要分析的.net  版本即可。

362fb8aed92fac1c18887d4679eaaba4.png

设置完成后,在VS的工程或者解决方案右键菜单中,选择:Analyze Assembly Portability,然后过一会儿就会出现结果。第二个Sheet页面详细的说明了不支持的API信息。

升级助手介绍和安装

   我们之前的应用在 .NET Framework 上运行,现在想将它们移植到 .NET 6。 当然你可以选择手动移植,但是更方便的方法是利用微软提供的升级助手去完成这个操作.

首先是升级助手安装,方法很简单,在命令窗口执行:

dotnet tool install -g upgrade-assistant

安装成功后,应该如下图所示:

0da27bba99af77d354a1f59ac4fad727.png

同样地,由于 .NET 升级助手是作为 .NET 工具安装的,因此运行以下命令可以轻松地更新它:

dotnet tool update -g upgrade-assistant

项目升级

 ①分析 : .NET 升级助手工具包括一种分析模式,它可以提供有关在升级开始之前可能需要进行的更改的见解。在命令窗口 运行 upgrade-assistant analyze 命令,传入正在升级的项目或解决方案的名称。如下图:

dc16c77df0c61a07f9e465ce5146bcfe.png

输出中有很多内部诊断信息,但某些信息非常有用。请注意,分析模式指示升级将建议项目以 net6.0-windows 目标框架名字对象 (net6.0-windows) 为目标。这是因为解决方案引用的项目是 WPF 项目,是一种仅限 Windows 的技术。控制台应用程序可能会获得直接升级到 TFM net6.0 的建议,除非它使用某些特定于 Windows 的库。

如果报告了任何错误或警告,请在开始升级前处理这些错误或警告。

②升级: 运行 upgrade-assistant upgrade 命令,传入正在升级的项目或解决方案的名称。

ff6f132add70c83e1d7ff6b69a640ef3.png

该工具将运行并显示它将执行的步骤列表。完成每个步骤后,该工具将提供一组命令,让用户应用或跳过下一步或其他选项。按 Enter 而不选择数字会选择列表中的第一项。杰西莱一顿按键enter,完成后如下图:

60e6db234a2faec08d02f64227544aef.png

详细步骤可参考官网文档--链接地址:

https://docs.microsoft.com/zh-cn/dotnet/core/porting/upgrade-assistant-wpf-framework

打开项目

升级完成后,选择VS2022打开项目,我旧项目依赖的Caliburn.Micro版本是3.2的不支持.NET 6,它已经自动升级到最高版本,解决方法项目数如如下图:

154897837e2e37a2075cbdf3212c6d2f.png

变更项:

①packages.config被迁移到项目.csproj文件;如下图

<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><TargetFramework>net6.0-windows</TargetFramework><OutputType>WinExe</OutputType><GenerateAssemblyInfo>false</GenerateAssemblyInfo><UseWPF>true</UseWPF><ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets></PropertyGroup><ItemGroup><PackageReference Include="Microsoft.CSharp" Version="4.7.0" /><PackageReference Include="System.Data.DataSetExtensions" Version="4.5.0" /><PackageReference Include="Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers" Version="0.3.310801"><PrivateAssets>all</PrivateAssets></PackageReference><PackageReference Include="Caliburn.Micro" Version="4.0.173" /></ItemGroup>
</Project>

②Caliburn.Micro:升级到最新支持.NET6的4.0版本;

③AssemblyInfo.cs:程序集版本按理在.NET6 中应该是在项目-》属性中设置,如下图:

a5425680f596f224a91bb818ae13926a.png

但是升级助手升级后没有清理多余的项,那我就手动删除下,最后如下图:

75b329a3d4c78ad064b13a8cce79012a.png

运行项目

f70115d9ef2e6b2b1d4b9e311d21a564.gif

项目下载

链接:https://pan.baidu.com/s/1pCdAdAJ-XVG8onsZ9OCYdQ

提取码:0000

技术群:添加小编微信并备注进群

小编微信:mm1552923   

公众号:dotNet编程大全    

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

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

相关文章

城市遥感动态监测管理系统

1.系统概述 随着全国各城市数字化进程的发展&#xff0c;高分辨率遥感影像和数字航空影像为“数字城市”的建设提供了丰富的数据源。近年来&#xff0c;遥感影像的空间分辨率和光谱分辨率的明显提高&#xff0c;使得高分辨率遥感影像和数字航空影像的应用得到了极大的延伸。在城…

3月第4周全球域名商TOP15:万网第四 涨幅居亚

IDC评述网&#xff08;idcps.com&#xff09;04月03日报道&#xff1a;据WebHosting.info公布的最新数据显示&#xff0c;在3月第4周&#xff0c;全球域名商域名总量十五强排行榜中&#xff0c;美国占10个席位&#xff0c;成为最大赢家。其次是中国&#xff0c;有3家域名商上榜…

【Blog.Core开源】框架集成部门权限

&#xff08;Blog.Core框架功能点概述&#xff09;Blog.Core开源四年啦&#xff0c;一行行代码凝结了大家的热情和心血&#xff0c;基本功能骨架已完成&#xff0c;欢迎更多的公司和企业使用哟。真实公司留言盖楼可获得一对一技术指导&#xff1a;https://github.com/anjoy8/Bl…

[一个经典的多线程同步问题]解决方案一:关键段CS

前面提出了一个经典的多线程同步互斥问题&#xff0c;本篇将用关键段CRITICAL_SECTION来尝试解决这个问题。 本文先介绍如何使用关键段&#xff0c;然后再深层次的分析下关键段的实现机制和原理。 关键段CRITICAL_SECTION一共就四个函数&#xff0c;下面说一下这四个函数的原型…

服务器线程数一直增加,.NET Core中遇到奇怪的线程死锁问题:内存与线程数不停地增长...

一个 asp.net core 站点&#xff0c;之前运行在Linux 服务器上&#xff0c;运行一段时间后有时站点会挂掉&#xff0c;在日志中记录很多“EMFILE too many open files”的错误&#xff1a;Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvException: Error -24 EMF…

python种颜色循环_Python 实现一个颜色色值转换的小工具

需求说明 公司的 UI 设计小哥&#xff0c;已经转用 Zeplin 很久了。Zeplin 的设计稿展示页面的颜色色值使用十进制的 RGB 表示的&#xff0c;在 Android 中的颜色表示大多情况下都需要十六进制的 RGB 表示。我的数学没有好到直接看到十进制就可以心算得到十六进制的结果&#x…

bugly中批量隐藏版本

App项目使用Bugly的内测分发功能进行整包的测试&#xff0c;但日积月累之后&#xff0c;版本就会特别多。而线上同时跑的版本可能不过三个左右&#xff0c;那么多版本会干扰到查看崩溃、选择版本&#xff0c;如何隐藏呢&#xff1f; 右上角&#xff0c;更多 –> 产品设置 –…

检查点(Checkpoint)过程如何处理未提交的事务

每次我讲解SQL Server之前&#xff0c;我都会先简单谈下当我们执行查询时&#xff0c;在SQL Server内部发生了什么。执行一个SELECT语句非常简单&#xff0c;但是执行DML语句更加复杂&#xff0c;因为SQL Server要修改内存中的相关页&#xff0c;并在事务日志里记录整个事务。 …

机器学习工作坊 - 计算机视觉

点击上方蓝字关注我们&#xff08;本文阅读时间&#xff1a;2分钟&#xff09;活动介绍四月的 MS Learn 学堂&#xff0c;我们将进入机器学习专题。 本月三期 MS Learn 学堂&#xff0c;我们会以工作坊的形式&#xff0c;结合具体应用实例&#xff0c;带领大家实践计算机视觉、…

arcgis server 无法手动删除切片

背景 问题 场景如下&#xff1a; 切片放置在专门的文件服务器上&#xff0c;通过unc共享路径对外共享。文件服务器的OS为windows server2008R2想手动更新切片服务的切片。发现同一切片服务&#xff0c;有的比例级别文件夹可以删除或者重命名。有的比例级别不可以。不能删除的比…

Hadoop 2.0 中的资源管理框架 - YARN(Yet Another Resource Negotiator)

1. Hadoop 2.0 中的资源管理 http://dongxicheng.org/mapreduce-nextgen/hadoop-1-and-2-resource-manage/Hadoop 2.0指的是版本为Apache Hadoop 0.23.x、2.x或者CDH4系列的Hadoop&#xff0c;内核主要由HDFS、MapReduce和YARN三个系统组成&#xff0c;其中&#xff0c;YARN是一…

React Native实现js调用安卓原生代码

1 问题 实现js调用安卓原始代码,直接上代码,简单粗暴 2 代码实现 1) 实现一个继承ReactContextBaseJavaModule的类,MyToastModule.java文件如下 public class MyToastModule extends ReactContextBaseJavaModule {public MyToastModule(ReactApplicationContext reactContext)…

发布nuget包的正确姿势---cicd自动打包发布

最轻便的发布nuget包方式&#xff0c;方便cicd自动打包发布nuget包首先新建项目项目名随便取&#xff0c;这里就叫它GuiH.ClassLibrary默认即可&#xff0c;需要改目标版本时&#xff0c;等创建好再改项目创建好了随便写个接口方法namespace GuiH.ClassLibrary {public class C…

我的世界服务器物品属性,属性 - Minecraft Wiki,最详细的官方我的世界百科

属性(Attributes)是生物和玩家身上的增益/减益特性系统。属性也存在修饰符(Modifiers)中&#xff0c;用于调整属性的强度。属性应用[]当应用到一个物品&#xff0c;一个物品的修饰符将增加或减少以修正相应的属性下面的命令将给最近的玩家一把增加20( 10)点额外伤害的钻石剑&a…

分布式和微服务区别_深度解析spring cloud分布式微服务的实现

分布式系统微服务就是原来臃肿的项目拆分为多个模块互不关联。如&#xff1a;按照子服务拆分、数据库、接口&#xff0c;依次往下就更加细粒度&#xff0c;当然运维也就越来越难受了。分布式则是偏向与机器将诺大的系统划分为多个模块部署在不同服务器上。微服务和分布式就是作…

通过Shell开发企业级专业服务启动脚本案例(MySQL)

老男孩教育Linux高端运维班Shell课后必会考试题:企业Shell面试题10&#xff1a;开发企业级MySQL启动脚本说明:MySQL启动命令为&#xff1a;/bin/sh mysqld_safe --pid-file$mysqld_pid_file_path 2>&1 >/dev/null &停止命令逻辑脚本为&#xff1a;mysqld_pidcat …

React Native之js调用Android原生使用Callback传递结果给js

如果不清楚js如何调用Android原生,可以先参考我的这篇博客React Native实现js调用安卓原生代码 1 问题 上面的文章只是调用安卓原生显示Toast,但是我们一般会需要调用安卓的代码然后去拿回结果给js,但是我们知道在android层js调用的这个函数返回值必须的void,所以我们需要用到…

ENVI帮助研究人员发现金矿

本文转自&#xff1a;http://www.esrichina-bj.cn/2012/0319/1663.html 遥感影像能让我们实时的获取地理区域的准确信息&#xff0c;这些为很多石油、天然气和矿产的开采提供关键的信息&#xff0c;节约实地测量的成本&#xff0c;提高工作效率。 美国圣路易斯大学的研究人员希…

C# 使用TCP创建HTTP客户程序

首先&#xff0c;创建一个控制台应用程序(包)&#xff0c;向 Web 服务器发送一个 HTTP 请求。以前用 HttpClient 类实现了这个功能&#xff0c;但使用 TcpClient 类需要深入 HTTP 协议。HttpClientUsingTcp 示例代码使用了以下名称空间:System System.IO System.Net.Sockets …

迅捷路由器 服务器无响应,如果路由器重启还是上不了网 几招搞定

如果网速很慢重启了路由器之后结果还是慢&#xff0c;而且甚至上不了网了那该怎么办。如果有这种情况原因其实有很多很多的可能&#xff0c;需要逐个排查&#xff0c;首先需要进入192.168.1.1路由器的管理设置界面&#xff0c;查看路由器的运行状态。路由器设置、路由器没有成功…