.NET5發佈,這個微軟“全家桶”會是.NET的春天嗎?

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在全面開源的步伐下,微軟也逐步跟上了腳步,作爲微軟最早邁向開源的重要軟件之一,.NET 5的發佈對微軟及其使用者都具有重要意義。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"微軟未來目標是將所有的 .NET 組件整合到一個產品下,然後用戶可以根據需求使用 .NET 的某個部分,而不是單獨下載或安裝所有內容。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對於Visual Studio用戶,需要Visual Studio 16.8或更高的版本才能在Windows上使用.NET 5.0,在MacOS上使用最新版本的Visual Studio for Mac)。Visual Studio Code的C#擴展也已經支持.NET5.0和C#9。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"NET 5.0是.NET統一之旅的第一個版本。微軟希望 .NET Framework 開發者能夠遷移他們的代碼和應用到 .NET 5.0 上,爲明年發佈的 .NET 6.0 將 Xamarin 開發者過渡到統一平臺奠定基礎。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"版本發佈時間軸:","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/26/262e73f5b4884ac289066657e54df64c.jpeg","alt":"","title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":".NET Core 3.0 已於2019/09推出","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":".NET Core 3.1 已於 2019/12推出,爲 LTS (Long Term Support,長期支援版),之後.NET Core 將更名.NET,固定每年釋出新版,並定義雙數版號爲LTS版,單數版號爲Current版。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":".NET 5.0 2020/11","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":".NET 6.0 LTS 2021/11","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":".NET 7.0 2022/11","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":".NET 8.0 LTS 2023/11","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如有興趣,可以體驗一下,歷來發佈資料及地址:https://dotnet.microsoft.com/download/dotnet/5.0","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/56/56bac10b45c8c571256829f2a62cb47b.jpeg","alt":"","title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/da/dae3415522546f285ec7c0de5e48bd45.jpeg","alt":"","title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":".NET 5.0是.NET Framework和.NET Core核心的結合,旨在統一.NET平臺。.NET 5.0毫無疑問代表的是.NET的未來,但是目前國內大部分企業使用的依然是.NET Framework,不過長期來看,升級似乎不可避免。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/6b/6ba2d6f86b88c95780a298e8fc92a187.png","alt":"","title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"爲了充分論證.NET5的性能,自首個預覽版發佈以來微軟已經進行了廣泛的內部部署,除了在 .NET 5.0 上運行.NET網站外,Bing也在使用這個新平臺。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"並在此次更新中強調了一些比較顯著的變化,包括一些性能上的改進。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"以下是微軟發佈的此版本的相關亮點:","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1..NET 5.0 已經部署到 http://dot.net和 http://Bing.com 託管數月,已經得到了實戰檢驗。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2.很多組件的性能都得到了極大的提高。.NET 5.0 中 ARM64 的性能 和 GRPC 等都有改善","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"3.C# 9和F# 5提供了新的語言改進,如C# 9的頂層程序和記錄,而F# 5則提供了交互式編程和.NET上功能編程的性能提升。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"4..NET庫對Json序列化、正則表達式和HTTP(HTTP 1.1、HTTP/2)的性能有所提升。它們現在也被完全註釋爲可空性。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"5.由於GC、分層編譯等方面的完善,P95延遲有所下降。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"6.應用部署選項更好了,有了ClickOnce客戶端應用發佈、單文件應用、容器鏡像尺寸減小,並增加了Server Core容器鏡像。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"7.平臺範圍擴大,增加了WindowsArm64和WebAssembly。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"8.一個值得注意的變化是,.NET 5.0應用可以原生運行在ARM64 Windows設備上,消除了仿真帶來的一些性能障礙。然而,在這個版本中,Windows 桌面組件並不能用於ARM64設備--這計劃在.NET 5.0的服務更新中進行。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"近幾年.NET Core 的開源項目也非常活躍,隨着.net5的發佈,這些項目將會逐步整合到.net5及之後的版本中。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"但是有幾點需要特別注意:","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"目前的.NET5雖然已經足夠強,但嚴格來說依然屬於實現階段,.NET6.0或許更值得期待。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"目前關於.net5的挺多升級並未在實際中討論,例如正則性能提升,靜態正則緩存;Kestrel 的通信性能提升,支持Http3; 證書互轉,增強 SSL 通信;readonly struct 在內部的應用;HttpClient 人性化的 Api,支持 webassembly, 支持序列化結果,支持 Quic 等;Json 支持字段序列化,只讀類型序列化,Web類型序列化,循環引用序列化等特性;GC 可分配 no zero 的內存空間,分配“固定住”的大堆空間,GCMemoryInfo 等等。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果並沒有急切的需求,目前並不建議升級至5.0,可以將5.0作爲研究跳板,在明年微軟發佈6.0LTS長期維護版本的時候再考慮升級,降低風險。當然,這個需要根據實際情況進行評估。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"......","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"接下來","attrs":{}},{"type":"text","text":",放一個.NET Core3.1升級.NET5可能遇到的坑,以作參考,不需要的可以略過此部分,作者“dotnet跨平臺”。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/55/55c7dfb0dbc8ec75cbb6965f58ef43c8.png","alt":"","title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"此前Scott Hunter在博客信誓旦旦.NET Core3.1平滑遷移.NET5,於是當天就去升級我的寶藏項目,結果是大坑沒有,小坑不斷,折騰了一天時間才搞定,下面來仔細捋一捋,給搭建提供點參考。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"背景介紹","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"升級的項目是之前開源在Github上,也曾一週新增300star,後面雖因故關閉了,但我個人是非常用心的。這不.NET5剛發佈,第一時間就開始了升級。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"項目是個微信小程序商城,後端是微服務架構支撐的,Ocelot網關+Consul服務註冊發現+Core WebApi+gRPC+IdentityServer4都安排上了,整體還是比較複雜的,MongoDB、Redis、RabbitMQ也都安排上了,然後就在.NET Core3.1升級.NET5的過程中,各種踩坑。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/9c/9cd8a3b7eb17a45d454807c853841087.png","alt":"","title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"VS升級坑","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"升級的第一個坑來自於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升級了,然後就開始了第二波環境坑!","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"經驗:如果遇到Visual Studio Installer提示網絡未連接無法下載,可以將當前電腦DNS設置爲8.8.8.8即可","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Linux環境坑","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Linux環境下VS Code開發之前都蠻熟悉了,這次想着是升級.NET5,就順手把Linux系統從CentOS7給換成了CentOS8,然後又華麗麗的各種坑。比如CentOS8中網卡名字從ens33變成了eth0,用nftables替代iptables,各種小變化讓人防不勝防,然後docker最新版本的命令也跟之前有些小變化,導致之前整理的Linux+Docker操作筆記各種失靈,來來回回折騰了好幾個小時。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當然,環境只是環境,折騰完就過去了,而代碼遷移層面的坑纔是最麻煩的,因爲並不知道還有多少沒發現!","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/44/44211784467550d336ebb4f4eaef1f17.png","alt":"","title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":".NET5遷移坑坑坑","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"項目從.NET Core3.1升級到.NET5非常easy,在 global.json 中將SDK版本從3.1升級成5.0,再將TargetFramework從netcoreapp3.1換成net5.0即可。還有部分類庫命名空間變化完全沒關係,宇宙第一IDE的智能提示輕鬆解決。但是,在真實項目遷移過程中,我卻遇到了各種小問題:","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1.Core WebApi框架模板項目中默認集成了swagger,這個是新增的,但之前項目有一些自定義配置和擴展,也導致了衝突。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2.IdentityServer4第三方框架版本升級,API變化很有點多,改動不了不少代碼,這個鍋雖然不是.NET5的,但也是升級項目會遇到的。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"3.嘗試C#9花了一些時間,想體驗下新語法新特性,如Native ints原生Ints、Pattern matching improvements模式匹配改進版,結果幾次把自己繞進去了。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"4.項目升級完發現的Bug,DateTime這個天天見的值出現了變化,在 ASP.NET Core 3.1 及更早版本中,DateTime綁定的是服務器本地時間,而5.0之後,DateTime綁定的是UTCTime。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"http://www.learun.cn/","title":null},"content":[{"type":"text","text":"Learun","attrs":{}}]},{"type":"text","text":".net","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章