.NET Core 3.1 升级到 .NET 8,看看都有哪些变化
创始人
2025-07-08 10:50:27
0

.NET Core 3.1 已经用了很长一段时间,其实在 2022 年的年底微软已经不提供支持了,后面的一个 LTS 版本 .NET 6 也会在 2024 年 11 月终止支持,所以直接升级到 .NET 8 是最好的选择。

微软官方推出了升级工具:Upgrade Assistant ,链接地址如下:

https://dotnet.microsoft.com/zh-cn/platform/upgrade-assistant/tutorial/intro

有了升级工具,升级就变得非常简单了,本文就介绍使用升级工具将 .NET Core 3.1 项目升级到 .NET 8 。

安装 Upgrade Assistant

先确保  VS2022  已经升级到了 17.8 。然后在 VS2022 的扩展管理中安装扩展:.NET Upgrade Assistant ,需要特别注意的是,如果之前安装过升级工具扩展,需要卸载重新安装。

升级项目

.NET Core 3.1 的一个解决方案中,会有很多的项目,按照项目的依赖关系,从最底层的项目逐个往上进行升级。

安装完升级工具后,在项目上点击右键就会出现 Upgrade 按钮:

在弹窗中选择升级方式:

选择升级的目标版本,这里我选择 .NET 8 ,这是一个长线支持版本,最新版本的升级工具只支持升级到 7 和 8 了,如果有升级到 .NET 6 的需求,就需要使用老版本了:

选择需要更新的内容,默认全选,点击「Upgrade selection」进行升级:

很快就可以看到升级成功的提示:

编译

我验证过好几个低版本的项目,使用工具升级的过程没有出现果任何错误,但升级完后进行代码编译就会出现各种问题了。

问题1:Ionic.zip

在原来的版本中,项目中的 zip 压缩用到了 Ionic.zip ,现在 .NET8 已经不支持了,需要换成 DotNetZip :

问题2:BinaryFormatter 已经过时

代码中有不少地方使用到了二进制的序列化,但 BinaryFormatter 在 .NET8 中已经弃用,有两种解决方式:

  • 修改源代码,采用新的推荐的方式进行替换。
  • 修改项目文件,忽略此问题,在项目文件种添加下面配置:

  
   ...
   $(NoWarn);SYSLIB0011
  

参考:https://learn.microsoft.com/zh-cn/dotnet/fundamentals/syslib-diagnostics/syslib0011。

问题 3:Aspose  使用问题

项目中对 Office 文件的处理,使用了 Aspose 套件,升级后版本有兼容性问题,升级到对应的版本就行。

问题 4:方法二义性

在之前的版本中,List 存储的如果是一个复杂类型,想要按照类型中的某个字段进行去重是没办法直接实现的:

List list = new List();
list.Add(new UserInfo() { Name="oec2003",Age=18});
list.Add(new UserInfo() { Name = "oec2003" ,Age=18});
list.Add(new UserInfo() { Name = "oec2004" ,Age=18});
list.Add(new UserInfo() { Name = "oec2004" ,Age=18});

var distnctList = list.DistinctBy(x=>x.Age);

foreach (var item in distnctList)
{
    Console.WriteLine(item.Name);
}

public class UserInfo
{
    public string Name { get; set; }
    public int Age { get; set; }
}

上面代码中的 DistinctBy 方法在 .NET Core 3.1 中是没有的,所以我们扩展了一个 DistinctBy 方法,没想到 .NET8 中已经默认提供了,会导致方法冲突,只需要将我们的扩展方法去掉,使用默认就好。

运行

解决了上面的几个编译问题后,程序就能正常启动运行了,整个过程还是非常快速的,不得不说,微软的技术向下兼容做的是非常不错的,再加上工具的加持,升级到新的版本没有什么压力和负担。

相比之下,其他有些技术虽然也在不停地更新迭代,但主流使用的还是某个特定的版本。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...