Upgrade from .NET 6 to .NET 7
Intro
.NET 7 已經發布了一段時間了,將幾個服務升級到了 .NET 7,升級還是比較順利的,也有遇到幾個問題,分享一下
TargetFramework
首先我們需要將項目文件中的目標框架(TargetFramework)從 .NET 6 更新到 .NET 7,
如果是類庫項目可以考慮增加 .NET 7 的目標框架
升級之后有一些 .NET 框架相關的 NuGet 包也可以升級更新到 7.0.0
如果項目里有用到 global.json
也要注意更新一下 SDK 的版本
CI update
CI 配置也需要更新到 .NET 7 或者增加 .NET 7 的環境,我個人平時使用的比較多的是 Github Actions 和 Azure DevOps 的 Pipeline,這里以這兩種為例
Github Actions 更新示例:
如果要配置多個版本的 SDK 也可以配置一次就可以,可以在一個 step 里配置多個 version,示例如下:
Azure pipeline CI 更新示例:
這里的示例是增加了 .NET 7 的 SDK,如果 .NET 6 的環境不再需要也可以直接把 .NET 6 SDK 的配置去掉
Dockerfile
如果項目里有打包 docker 鏡像,更新了之后別忘記更新一下 Dockerfile 里的 base image
CodeSpace
如果你定制了 Github 的 CodeSpace 或者有在用 devcontainer 之類的環境,如果之前是 .NET 6 的環境別忘記更新到 .NET 7 環境,將原來 .NET 6 的鏡像更新到 .NET 7
dotnet-monitor
有幾個項目有使用到 dotnet-monitor 來作為 sidecar 來收集應用程序的狀態,升級時也遇到了點問題
主要使用的 tag 沒有指定,相當于使用的是 latest,拉取最新鏡像的時候拉了 dotnet-monitor:7
的鏡像有一些 breaking change 導致 monitor 起不來,應用也無法啟動,可以參考:https://github.com/dotnet/dotnet-monitor/issues/2892
修復辦法:
指定使用
dotnet-monitor:6
使用
dotnet-monitor:7
?的時候需要修改啟動參數
-?args:?[?"--no-auth"?]
+?args:?[?"collect",?"--urls",?"http://+:52323",?"--no-auth"]
More
EF 7 更新后,有些項目里的一些更新和刪除操作也可以升級為 EF 7 里的批量更新和刪除操作了~
在更新一個 WPF 項目時,項目里有用到 MaterialDesignThemes
想著一起升級,升級之后有一些不兼容的變化折騰了一段時間,升級第三方的類庫的時候注意看一下 breaking changes 可能會少踩一些坑
References
https://github.com/WeihanLi/SparkTodo/commit/dc8b854f79817b9fe657d6da1f3b00752187f0f0
https://github.com/WeihanLi/SparkTodo/commit/87adcc02207bd5fb35f5ae5e078c998cc0a26fa7
https://github.com/WeihanLi/dotnet-httpie/commit/66ef609973a932dc9e419c9530658dbd884797f7
https://github.com/OpenReservation/ReservationServer/commit/0be1715fceceb4ebbf8c625cb9db4ee8cddd1632
https://github.com/night-moon-studio/NatashaPad/pull/15
https://github.com/dotnet/dotnet-monitor/issues/2892
https://github.com/dotnet/dotnet-monitor/discussions/2864