.NET Conf 2020於2020年11月10日舉行,會上正式發布.NET 5。.NET 5是.NET平台統一的第一個版本。
.NET 5 SDK和Visual Studio 2019 v16.8版本在11月10日已經提供下載,更新Visual Studio 2019 版本至v16.8以支持.NET 5。
此次更新,更新了很多重要功能。包括但不僅限於以下內容:
1、C# 9.0
- 記錄
- 僅限 Init 的資源庫
- 頂級語句
- 模式匹配增強功能
- 本機大小的整數
- 函數指針
- 禁止發出 localsinit 標志
- 目標類型的新表達式
- 靜態匿名函數
- 目標類型的條件表達式
- 協變返回類型
- 擴展 GetEnumerator 支持 foreach 循環
- Lambda 棄元參數
- 本地函數的屬性
- 模塊初始值設定項
- 分部方法的新功能
2、性能提高
Performance Improvements in .NET 5.0, Arm64 Performance in .NET 5.0, 和 gRPC.
3、.NET自帶類庫增強
Json序列化、正則表達式和and HTTP (HTTP 1.1, HTTP/2)。
- .NET 5.0對System.Text.Json進行了顯着改進,以提高性能,可靠性。https://github.com/dotnet/runtime/issues/41313
- HttpClient類增加了一些擴展方法
- 改進了對不可變類型的支持
- 新增JsonSerializer支持record和fields類型
4、P95延遲減少
由於GC,分層編譯和其他方面的改進,P95延遲有所減少。https://docs.microsoft.com/en-us/azure/internet-analyzer/internet-analyzer-scorecard
5、增加對Windows ARM64和WebAssembly的支持
.NET應用程序現在可以在Windows Arm64上本機運行。 這是在.NET Core 3.0中添加的對Linux Arm64的支持(對glibc和musl的支持)。 使用.NET 5.0,您可以在Windows Arm64設備(例如Surface Pro X)上開發和運行應用程序。
WPF和Winform目前還不支持運行在Windows Arm64設備上,需要等待后續更新。
此外,Windows ARM64性能也得到了提升,https://github.com/dotnet/runtime/issues/35853
6、Windows Form設計器增強
在Visual Studio 2019 16.8版本中,Windows Form設計器得到了增強(針對.NET Core 3.1和.NET 5)。
現在已經支持全部Winform的控件以及Telerik Winform控件。
設計器現在已經包括:拖放,選擇,移動和調整大小;剪切/復制/粘貼/刪除控件,與屬性窗口集成,事件生成等功能。 數據綁定和對更廣泛的第三方控件的支持將會在后續版本中實現
反正這些在.Net Framework版本中很早就已經有了,這次更新也就不算新鮮事了。
7、TargetFramework已經更新為net5.0
在https://www.cnblogs.com/zhaotianff/p/13440107.html這篇WPF的文章中,可以看到以前的TargetFrameWork是netcoreapp3.1,現在已經是net5.0了
在后續的.NET 6.0版本中,Xamarin項目還能通過TargetFramework來描述操作系統依賴性,定位iOS和Android。
針對桌面項目(WPF、Winform和WinRT),TargetFramework已經被更新為net5.0-windows,還可以指定操作系統版本,如 net5.0-windows7
、net5.0-windows10.0.17763.0
。
這也就意味着在WPF中可以直接引用Winform的類庫,不再需要修改.csproj文件。反之亦是如此。
如果需要使用WinRT APIs,就必須指定Windows 10的版本,如net5.0-windows10.0.15063.0(Windows v1703)
如果有跨平台需求,需要注意以下幾點:
- net5.0是.NET 5.0的新目標框架(TFM)。
- net5.0結合並替代了netcoreapp和netstandard TFM。(https://docs.microsoft.com/en-us/dotnet/standard/frameworks#supported-target-frameworks)
- net5.0支持.NET Framework兼容模式
- net5.0-windows用於標識使用Windows系統特定的功能(APIs),包括Windows窗體,WPF和WinRT API。
- 在.NET 6.0中將添加net6.0-ios和net6.0-android,默認TFM 是net6.0。
- 特定於操作系統的TFM可以包含操作系統版本號,例如net6.0-ios14。
- 可移植API,如ASP.NET Core將可與net5.0一起使用。 在net6.0中,Xamarin forms也將支持該功能。
說明:
在Visual Studio 2019 16.8/16.8.1版本中,控制台應用程序、WPF、Winform的目標框架仍然是.Net Core 3.1,需要手動修改成.NET 5.0。而ASP.NET項目,默認目標框架已經是.NET 5.0。
8、與WinRT互操作(重大更改)
一個重大更改就是,WinRT APIs現在已經作為.NET 5.0的一部分,現有的WinRT互操作方式已從.NET運行時中刪除。 這也就意味着使用了WinRT庫函數的.Net Core 3.x應用程序在升級到.NET 5.0時,需要重新構建。
這也就意味着,不再需要手動引用任何組件,導入命名空間就可以直接使用WinRT APIs。
在Windows 8操作系統中,微軟推出了WinRT,一種新的運行時。到Windows 10時代,WinRT已經變成UWP,現在又叫回了WinRT,還是那種熟悉的感覺。雖然我不做這方面的開發,但以前讀過一本書叫Windows Runtime via C#,當時就覺得WinRT很強。
9、Native Export(原生導出?)
這個功能主要跨平台用,我目前用不到,可訪問以下鏈接獲取詳細信息https://github.com/AaronRobinsonMSFT/DNNE
10、在Windows上支持(ICU International Components for Unicode)
ICU庫用於Unicode和全球化支持,以前僅在Linux和macOS上使用。
這一塊我目前用不到
12、單文件應用
單個文件應用程序作為單個文件發布和部署。 該應用程序及其依賴項都包含在該文件中。 當應用程序運行時,依賴項直接從該文件加載到內存中。
這個功能目前主要是針對 Linux的。這功能挺好的,坐等支持Windows。
關於.NET 5的詳細介紹,可以訪問以下鏈接: