去年年底,我們發布了.NET Core 3.0
和3.1
。這些版本添加了對桌面應用程序模型:Windows Forms(Winforms)、WPF,用於構建單頁應用程序的ASP.NET Blazor
和基於消息傳遞的跨平台的gRPC
支持。我們還添加了用於構建服務的模版,用於與gRPC
進行通信的客戶端代碼生成、REST API
服務等等。我們很高興看到.NET Core 3
成為有史以來最快的.NET
版本,並且在去年又增加了100萬用戶。
我們與這些版本進行了交流,以結束從.NET Framework
移植到.NET Core 3
應用程序模型的過程,我們已經移植了所有最常用的應用程序模型,並引入了更新的跨平台框架來替代我們未移植的框架。
當我們期待寫一個主要版本.NET 5
時,我們將通過在.NET 5
中包含的.NET
移動設備應用程序模型(Xamarin
),繼續將.NET
統一到一個平台中。.NET 5
將包含ASP.NET Core
,Entity Framework Core
,WinForms
,WPF
,Xamarin
和ML.NET
。整個平台將首次為所有應用城西模型使用統一的BCL(Base Class Libraries)
。擁有比.NET Core
和.NET Framework
都更高的版本5,這也清楚表明.NET 5
是.NET
的未來,它是用於構建任何類型的應用程序的單個統一平台。
我們已經說過很多次了,但是我們將再次重申。.NET Core
和后面的.NET 5
是你應當使用.NET
構建所有新應用程序。只要在Windows
平台本身,.NET Framework
仍將受到支持。我們將繼續提供安全性和錯誤修復,並保持網絡和加密API在最新狀態。將較舊的應用程序保留着.NET Framework
上將保持安全並受到支持。
安裝.NET 5 Preview 1
今天,我們將發布.NET 5
的第一個預覽版,該預覽版計划於今年11月下旬發布到GA(一般可用性)。
請參閱.NET 5 Preview 1
中的ASP.NET Core
更新,以了解今天發布的ASP.NET Core
版本。
Preview 1
包括首次對Windows ARM64
的支持。今天發布的版本包括對.NET Core
的運行時。我們希望Preview 2
包含SDK
(ASP.NET Core
,但不包含WPF
或Windows Forms
)。稍后的預覽版將包括WPF
和Windows Forms
。對Windows ARM64
的支持也將反向移植到.NET Core 3.1
版本中。
更新現有項目
你可以通過更新目標框架來更新現有項目,如下所示:
<TargetFramework>netcoreapp5.0</TargetFramework>
.NET 5
的高級目標
讓我重點介紹.NET 5
的一些高級目標:
- 統一的
.NET SDK
經驗:
- 所有
.NET 5
應用程序中的單個BCL(Base Class Libraries)
。現在的Xamarin
應用程序使用Mono BCL
,但是將轉向.NET Core BCL
,從而改善了我們應用程序模型之間的兼容性。 - 移動開發(
Xamarin
)已經集成到.NET 5
中。這意味着.NET SDK
將支持移動。例如,你可以使用dotnet new XamarinForms
創建移動應用程序。
- 支持多種平台的原生應用程序:支持應用程序的“單個設備”項目,該應用程序可以使用這些平台上的支持的原生控件在多個設備商運行,例如
Window Desktop
,Microsoft Duo(Android)
和iOS
。 - 支持多種平台的
Web
應用程序:支持應用程序的Single Blazor
項目,該應用程序可以在瀏覽器中,在移動設備上以及作為本機桌面應用程序運行(例如Windows 10x
)。
雲原生應用程序:高性能,單文件(.exe)<50MB的微服務,並支持在本地和在雲中構建多個項目(API
,Web
前端,容器)。 - 持續改進,例如:在
BCL
中更快的算法,運行時中對容器的更好支持,對HTTPS3
的支持。
今天的第一個預覽版尚未包含支持這些高級目標的所有工作,但我們將在未來的預覽版中繼續宣布更多功能。
Preview 1
的改進
Preview 1
中有以下改進:
正則表達式性能改進
我們已對Regex
引擎進行了重大改進。在我們嘗試過的許多表達式中,這些改進通常可以將吞吐量提高3-6倍,在某些情況下甚至可以提高更多。我們即將發布一篇博客文章,其中將詳細介紹這些改進。
RyuJIT
中代碼質量的改進
每個版本都對JIT
生成的代碼進行了一系列性能改進。我們將這些類型的改進稱為CQ
或代碼質量。在大多數情況下,這些改進也適用於為准備運行的圖像生成的代碼。
Preview 1
中有以下改進:
null
檢查的改進 - 在更多情況下,通過觀察證明不需要使用null
檢查的更多模式,無需生成null
檢查。- 調整的通用子表達式評估(CSE) -
JIT
查找並折疊只需要評估一次的重復表達式(Wiki)。 - 優化“constant_string”.Length - 優化此模式並將代碼折疊為正確的整數值。
JIT
:在變體之前構建基本的pred
列表 - 對JIT
中階段進行重新排序以允許焦躁使用密鑰優化,從而可以提高代碼質量,並減少后續階段的工作量,從而增加JIT
吞吐量(參考PR中的“TP”)。
裝配負載診斷已添加到事件管道
我們已將程序集加載信息添加到事件管道。這項改進開始提供類似的診斷功能(與.NET Framework一起使用Fusion Log Viewer的一部分)的開始。現在,你可以使用dotnet-trace
通過以下命令來收集此信息:
dotnet-trace collect --providers Microsoft-Windows-DotNETRuntime:4:4 --process-id [process ID]
使用事件管道的跟蹤程序集加載中介紹了工作流。您可以查看簡單測試應用程序的程序集加載信息。
事件管道探測器API
事件管道是我們在.NET Core 2.2
中添加的新子系統和API,可以在任何操作系統上執行性能和其他診斷調查。在.NET 5.0
中,事件管道已得到擴展,以使探查器能夠寫入事件管道事件。對於以前依靠ETW
監視應用程序行為和性能的分析探查器,此方案至關重要。
GitHub
repo合並
作為.NET 5
版本的一部分,我們減少了用於構建和打包.NET
的GitHub
存儲庫的數量。Repo邊界對項目的許多方面都具有重大影響,包括構建和問題管理。使用.NET Core 1.0
,我們在ASP.NET
,EF
和.NET Core
中擁有超過100個存儲庫,通過此最新版本,我們現在可以一方面計入主存儲庫。我們還將幾乎所有存儲庫都移到了dotnet
組織。
查看新的合並倉庫:
- dotnet/runtime (是dotnet/corefx,dotnet/coreclr,和dotnet/core-setup)
- dotnet/aspnetcore (aspnet組織中的幾個倉庫)
- dotnet/sdk ( 是dotnet/sdk, dotnet/cli)
結束語
我們希望你對.NET 5
正在進行的工作感到興奮!為.NET 5
做准備的最好方法是將所有的.NET Core
應用程序遷移到3.1
- 我們將使從.NET Core 3.1
到.NET 5
的過渡盡可能輕松。而且,如果你仍在.NET Framework
上構建應用程序,請放心將這些應用程序放在.NET Framework
上,但請考慮對所有新應用程序使用.NET Core 3.1
。.NET
有很多令人興奮的事情!