.NET Core3.1升级.NET5,坑还真不少...
11月11號是電商狂歡的日子,也是.NET5正式發布的日子,媳婦兒等著零點秒殺,我卻在刷新著微軟官網等更新,然后第一時間開始折騰。此前Scott Hunter在博客信誓旦旦.NET Core3.1平滑遷移.NET5,于是當天就去升級我的寶藏項目,結果是大坑沒有,小坑不斷,折騰了一天時間才搞定,下面來仔細捋一捋,給搭建提供點參考。
背景介紹
升級的項目是之前開源在Github上,也曾一周新增300star,后面雖因故關閉了,但我個人是非常用心的。這不.NET5剛發布,第一時間就開始了升級。
項目是個微信小程序商城,后端是微服務架構支撐的,Ocelot網關+Consul服務注冊發現+Core WebApi+gRPC+IdentityServer4都安排上了,整體還是比較復雜的,MongoDB、Redis、RabbitMQ也都安排上了,然后就在.NET Core3.1升級.NET5的過程中,各種踩坑。
VS升級坑
升級的第一個坑來自于VS工具升級!之前.NET5預覽版、RC1、RC2都是用的Visual Studio 2019 Preview,這會兒.NET5正式版發現只需要把Visual Studio 2019升級到V16.8即可,然后就興沖沖的升級去了,結果當頭一棒:Visual Studio Installer提示網絡未連接無法下載!當然不是我的網絡問題,其實是DNS解析上出了毛病(部分用戶會遇到,解決辦法是把電腦的DNS設置為8.8.8.8即可),但畢竟當時是11號凌晨,以為是微軟官方同步不夠,我就選擇換工具,直接去Linux下用VS Code升級了,然后就開始了第二波環境坑!
經驗:如果遇到Visual Studio Installer提示網絡未連接無法下載,可以將當前電腦DNS設置為8.8.8.8即可
Linux環境坑
Linux環境下VS Code開發之前都蠻熟悉了,這次想著是升級.NET5,就順手把Linux系統從CentOS7給換成了CentOS8,然后又華麗麗的各種坑。比如CentOS8中網卡名字從ens33變成了eth0,用nftables替代iptables,各種小變化讓人防不勝防,然后docker最新版本的命令也跟之前有些小變化,導致之前整理的Linux+Docker操作筆記各種失靈,來來回回折騰了好幾個小時。
當然,環境只是環境,折騰完就過去了,而代碼遷移層面的坑才是最麻煩的,因為并不知道還有多少沒發現!
.NET5遷移坑坑坑
項目從.NET Core3.1升級到.NET5非常easy,在 global.json 中將SDK版本從3.1升級成5.0,再將TargetFramework從netcoreapp3.1換成net5.0即可。還有部分類庫命名空間變化完全沒關系,宇宙第一IDE的智能提示輕松解決。但是,在真實項目遷移過程中,我卻遇到了各種小問題:
1
Core WebApi框架模板項目中默認集成了swagger,這個是新增的,但之前項目有一些自定義配置和擴展,也導致了沖突。
2
IdentityServer4第三方框架版本升級,API變化很有點多,改動不了不少代碼,這個鍋雖然不是.NET5的,但也是升級項目會遇到的。
3
嘗試C#9花了一些時間,想體驗下新語法新特性,如Native ints原生Ints、Pattern matching improvements模式匹配改進版,結果幾次把自己繞進去了。
4
項目升級完發現的Bug,DateTime這個天天見的值出現了變化,在 ASP.NET Core 3.1 及更早版本中,DateTime綁定的是服務器本地時間,而5.0之后,DateTime綁定的是UTCTime。
來場.NET5項目遷徙大作戰
真是不動手不知道,全靠看帖子是靠不住的。自詡老司機的我,也花了快10個小時才完成了項目的遷移,而且還不知道有沒有隱藏的坑!當下大家都面臨著將項目遷移到.NET5,這些踩坑經驗倒也難得。今晚八點,我給大家來一波直播分享,實操.NET5+微服務+小程序,完成第一波.NET5實戰,掃碼進群,今晚見!
配套準備
本次分享只需要提前準備好.NET5相關環境即可,這里打包了VS2019 16.8的社區版、專業版、企業版安裝文件,還有對應的激活碼,需要請領取。
掃碼領取配套資料
添加人數過多添加以下WX也可
zhaoxiHHHHH
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的.NET Core3.1升级.NET5,坑还真不少...的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: .NET必知的EventCounters
- 下一篇: 怎么将SVG转成PNG(.NET工具包编
