昨晚.NET5遷移10小時(shí),我發(fā)現(xiàn)了好幾個(gè)致命坑...
11月11號(hào)是電商狂歡的日子,也是.NET5正式發(fā)布的日子,媳婦兒等著零點(diǎn)秒殺,我卻在刷新著微軟官網(wǎng)等更新,然后第一時(shí)間開(kāi)始折騰。此前Scott Hunter在博客信誓旦旦.NET Core3.1平滑遷移.NET5,于是當(dāng)天就去升級(jí)我的寶藏項(xiàng)目,結(jié)果是大坑沒(méi)有,小坑不斷,折騰了一天時(shí)間才搞定,下面來(lái)仔細(xì)捋一捋,給搭建提供點(diǎn)參考。
背景介紹
升級(jí)的項(xiàng)目是之前開(kāi)源在Github上,也曾一周新增300star,后面雖因故關(guān)閉了,但我個(gè)人是非常用心的。這不.NET5剛發(fā)布,第一時(shí)間就開(kāi)始了升級(jí)。
項(xiàng)目是個(gè)微信小程序商城,后端是微服務(wù)架構(gòu)支撐的,Ocelot網(wǎng)關(guān)+Consul服務(wù)注冊(cè)發(fā)現(xiàn)+Core WebApi+gRPC+IdentityServer4都安排上了,整體還是比較復(fù)雜的,MongoDB、Redis、RabbitMQ也都安排上了,然后就在.NET Core3.1升級(jí).NET5的過(guò)程中,各種踩坑。
VS升級(jí)坑
升級(jí)的第一個(gè)坑來(lái)自于VS工具升級(jí)!之前.NET5預(yù)覽版、RC1、RC2都是用的Visual Studio 2019 Preview,這會(huì)兒.NET5正式版發(fā)現(xiàn)只需要把Visual Studio 2019升級(jí)到V16.8即可,然后就興沖沖的升級(jí)去了,結(jié)果當(dāng)頭一棒:Visual Studio Installer提示網(wǎng)絡(luò)未連接無(wú)法下載!當(dāng)然不是我的網(wǎng)絡(luò)問(wèn)題,其實(shí)是DNS解析上出了毛病(部分用戶會(huì)遇到,解決辦法是把電腦的DNS設(shè)置為8.8.8.8即可),但畢竟當(dāng)時(shí)是11號(hào)凌晨,以為是微軟官方同步不夠,我就選擇換工具,直接去Linux下用VS Code升級(jí)了,然后就開(kāi)始了第二波環(huán)境坑!
經(jīng)驗(yàn):如果遇到Visual Studio Installer提示網(wǎng)絡(luò)未連接無(wú)法下載,可以將當(dāng)前電腦DNS設(shè)置為8.8.8.8即可
Linux環(huán)境坑
Linux環(huán)境下VS Code開(kāi)發(fā)之前都蠻熟悉了,這次想著是升級(jí).NET5,就順手把Linux系統(tǒng)從CentOS7給換成了CentOS8,然后又華麗麗的各種坑。比如CentOS8中網(wǎng)卡名字從ens33變成了eth0,用nftables替代iptables,各種小變化讓人防不勝防,然后docker最新版本的命令也跟之前有些小變化,導(dǎo)致之前整理的Linux+Docker操作筆記各種失靈,來(lái)來(lái)回回折騰了好幾個(gè)小時(shí)。
當(dāng)然,環(huán)境只是環(huán)境,折騰完就過(guò)去了,而代碼遷移層面的坑才是最麻煩的,因?yàn)椴⒉恢肋€有多少?zèng)]發(fā)現(xiàn)!
.NET5遷移坑坑坑
項(xiàng)目從.NET Core3.1升級(jí)到.NET5非常easy,在 global.json 中將SDK版本從3.1升級(jí)成5.0,再將TargetFramework從netcoreapp3.1換成net5.0即可。還有部分類庫(kù)命名空間變化完全沒(méi)關(guān)系,宇宙第一IDE的智能提示輕松解決。但是,在真實(shí)項(xiàng)目遷移過(guò)程中,我卻遇到了各種小問(wèn)題:
1
Core WebApi框架模板項(xiàng)目中默認(rèn)集成了swagger,這個(gè)是新增的,但之前項(xiàng)目有一些自定義配置和擴(kuò)展,也導(dǎo)致了沖突。
2
IdentityServer4第三方框架版本升級(jí),API變化很有點(diǎn)多,改動(dòng)不了不少代碼,這個(gè)鍋雖然不是.NET5的,但也是升級(jí)項(xiàng)目會(huì)遇到的。
3
嘗試C#9花了一些時(shí)間,想體驗(yàn)下新語(yǔ)法新特性,如Native ints原生Ints、Pattern matching improvements模式匹配改進(jìn)版,結(jié)果幾次把自己繞進(jìn)去了。
4
項(xiàng)目升級(jí)完發(fā)現(xiàn)的Bug,DateTime這個(gè)天天見(jiàn)的值出現(xiàn)了變化,在 ASP.NET Core 3.1 及更早版本中,DateTime綁定的是服務(wù)器本地時(shí)間,而5.0之后,DateTime綁定的是UTCTime。
