新聞中心
.NET Core 3.1 已經(jīng)用了很長(zhǎng)一段時(shí)間,其實(shí)在 2022 年的年底微軟已經(jīng)不提供支持了,后面的一個(gè) LTS 版本 .NET 6 也會(huì)在 2024 年 11 月終止支持,所以直接升級(jí)到 .NET 8 是最好的選擇。

微軟官方推出了升級(jí)工具:Upgrade Assistant ,鏈接地址如下:
https://dotnet.microsoft.com/zh-cn/platform/upgrade-assistant/tutorial/intro
有了升級(jí)工具,升級(jí)就變得非常簡(jiǎn)單了,本文就介紹使用升級(jí)工具將 .NET Core 3.1 項(xiàng)目升級(jí)到 .NET 8 。
安裝 Upgrade Assistant
先確保 VS2022 已經(jīng)升級(jí)到了 17.8 。然后在 VS2022 的擴(kuò)展管理中安裝擴(kuò)展:.NET Upgrade Assistant ,需要特別注意的是,如果之前安裝過(guò)升級(jí)工具擴(kuò)展,需要卸載重新安裝。
升級(jí)項(xiàng)目
.NET Core 3.1 的一個(gè)解決方案中,會(huì)有很多的項(xiàng)目,按照項(xiàng)目的依賴(lài)關(guān)系,從最底層的項(xiàng)目逐個(gè)往上進(jìn)行升級(jí)。
安裝完升級(jí)工具后,在項(xiàng)目上點(diǎn)擊右鍵就會(huì)出現(xiàn) Upgrade 按鈕:
在彈窗中選擇升級(jí)方式:
選擇升級(jí)的目標(biāo)版本,這里我選擇 .NET 8 ,這是一個(gè)長(zhǎng)線支持版本,最新版本的升級(jí)工具只支持升級(jí)到 7 和 8 了,如果有升級(jí)到 .NET 6 的需求,就需要使用老版本了:
選擇需要更新的內(nèi)容,默認(rèn)全選,點(diǎn)擊「Upgrade selection」進(jìn)行升級(jí):
很快就可以看到升級(jí)成功的提示:
編譯
我驗(yàn)證過(guò)好幾個(gè)低版本的項(xiàng)目,使用工具升級(jí)的過(guò)程沒(méi)有出現(xiàn)果任何錯(cuò)誤,但升級(jí)完后進(jìn)行代碼編譯就會(huì)出現(xiàn)各種問(wèn)題了。
問(wèn)題1:Ionic.zip
在原來(lái)的版本中,項(xiàng)目中的 zip 壓縮用到了 Ionic.zip ,現(xiàn)在 .NET8 已經(jīng)不支持了,需要換成 DotNetZip :
問(wèn)題2:BinaryFormatter 已經(jīng)過(guò)時(shí)
代碼中有不少地方使用到了二進(jìn)制的序列化,但 BinaryFormatter 在 .NET8 中已經(jīng)棄用,有兩種解決方式:
- 修改源代碼,采用新的推薦的方式進(jìn)行替換。
- 修改項(xiàng)目文件,忽略此問(wèn)題,在項(xiàng)目文件種添加下面配置:
...
$(NoWarn);SYSLIB0011
參考:https://learn.microsoft.com/zh-cn/dotnet/fundamentals/syslib-diagnostics/syslib0011。
問(wèn)題 3:Aspose 使用問(wèn)題
項(xiàng)目中對(duì) Office 文件的處理,使用了 Aspose 套件,升級(jí)后版本有兼容性問(wèn)題,升級(jí)到對(duì)應(yīng)的版本就行。
問(wèn)題 4:方法二義性
在之前的版本中,List 存儲(chǔ)的如果是一個(gè)復(fù)雜類(lèi)型,想要按照類(lèi)型中的某個(gè)字段進(jìn)行去重是沒(méi)辦法直接實(shí)現(xiàn)的:
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 中是沒(méi)有的,所以我們擴(kuò)展了一個(gè) DistinctBy 方法,沒(méi)想到 .NET8 中已經(jīng)默認(rèn)提供了,會(huì)導(dǎo)致方法沖突,只需要將我們的擴(kuò)展方法去掉,使用默認(rèn)就好。
運(yùn)行
解決了上面的幾個(gè)編譯問(wèn)題后,程序就能正常啟動(dòng)運(yùn)行了,整個(gè)過(guò)程還是非常快速的,不得不說(shuō),微軟的技術(shù)向下兼容做的是非常不錯(cuò)的,再加上工具的加持,升級(jí)到新的版本沒(méi)有什么壓力和負(fù)擔(dān)。
相比之下,其他有些技術(shù)雖然也在不停地更新迭代,但主流使用的還是某個(gè)特定的版本。
當(dāng)前名稱(chēng):.NETCore3.1升級(jí)到.NET8,看看都有哪些變化
網(wǎng)站URL:http://m.5511xx.com/article/cdiscsp.html


咨詢(xún)
建站咨詢(xún)
