.NET Core 2.2 正式發布,有你喜歡的特性嗎?
微軟發布了.NET Core 2.2版本,主要包含對運行時的診斷改進,對ARM32 for Windows和Azure Active Directory for SQL Client的支持。此版本最大的改進是在ASP.NET Core中。你可以在Windows、macOS和Linux上下載並開始使用.NET Core 2.2:
ASP.NET Core 2.2 和 Entity Framework Core 2.2 也已發布。
下載:
Visual Studio 15.9、Visual Studio for Mac和Visual Studio Code已支持.NET Core 2.2 。
更新亮點:分層編譯(Tiered Compilation)
分層編譯是一種使運行時能夠更自適應地使用實時(JIT)編譯器,以在啟動時獲得更好的性能並最大化吞吐量的功能。該功能在.NET Core 2.1中是可選的,然後在.NET Core 2.2 Preview 2中默認啟用。不過團隊認為還沒有準備好在正式的.NET Core 2.2版本中默認啟用它,所以已將其切換回可選功能。
分層編譯有望在.NET Core 3.0 中默認啟用。
運行時事件(Runtime Events)
我們通常需要監視運行時服務(如當前進程的GC,JIT 和ThreadPool ),以了解這些服務在運行應用程序時的行為方式。在Windows 系統上,這通常使用ETW 監視當前進程的ETW 事件來完成。雖然這種方法仍然有效,但使用ETW 並不總是很容易。在一些低權限環境中,或是在Linux、macOS 上,都可能無法使用ETW 。
從.NET Core 2.2 開始,可以使用EventListener 類來使用CoreCLR 事件。這些事件描述了GC,JIT,ThreadPool 和interop 的行為。它們在Windows 上作為CoreCLR ETW 提供程序的一部分公開的相同事件。這允許應用使用這些事件或使用傳輸機制將它們發送到遙測聚合服務。
訂閱事件示例代碼:
內部密封類SimpleEventListener:EventListener {//每當創建一個EventSource時調用。protected override void OnEventSourceCreated(EventSource eventSource){//監視.NET運行時EventSource並啟用其所有事件。if(eventSource.Name.Equals(“Microsoft-Windows-DotNETRuntime”)){EnableEvents(eventSource,EventLevel.Verbose,(EventKeywords)( - 1)); 每次寫入事件時都會調用。protected override void OnEventWritten(EventWrittenEventArgs eventData){//將事件的內容寫入控制台。Console.WriteLine($“ThreadID = {eventData.OSThreadId} ID = {eventData.EventId} Name = {eventData.EventName}”); for(int i = 0; i <eventData.Payload.Count; i ++){string payloadString = eventData.Payload [i]!= null?eventData.Payload [i] .ToString():string.Empty; Console.WriteLine($“\ t = {”{eventData.PayloadNames [i]} \“Value = \”{payloadString} \“”); } Console.WriteLine(“\ n”); }}
SqlConnection 支持 AccessToken
SQL Server 的ADO.NET provider —— SqlClient,現在支持將AccessToken 屬性設置為使用Azure Active Directory 以對SQL Server 連接進行身份驗證。要使用此功能,你可以使用Microsoft.IdentityModel.Clients.ActiveDirectory NuGet 包中包含的 Active Directory Authentication Library for .NET 獲取access token value 。
使用Azure Active directory 驗證SQL Server 連接示例:
//使用ADAL.NETvar獲取訪問令牌authContext = new AuthenticationContext(authority); var authResult = await authContext.AcquireTokenAsync(appUri,clientCredential); //建立與SQL Server的連接sqlConnection = new SqlConnection(connectionString); sqlConnection.AccessToken = authResult .AccessToken;等待sqlConnection.OpenAsync();
此外,該版本還包含 Injecting code prior to Main,提供Windows ARM32 支持等特性。
適用平台:
- Windows客戶端:7,8.1,10(1607+)
- Windows Server:2008 R2 SP1 +
- macOS:10.12+
- RHEL:6+
- Fedora:26歲以上
- Ubuntu:16.04+
- Debian:9+
- SLES:12+
- openSUSE:42.3+
- 高山:3.7+
適用芯片:
- Windows,macOS和Linux上的x64
- Windows上的x86
- Linux上的ARM32(Ubuntu 16.04 +,Debian 9+)
- Windows上的ARM32(1809+; 1月份可用)
完整詳細信息請查閱 .NET Core 2.2發行說明。
我們很高興地宣布發布.NET Core 2.2。它包括對運行時的診斷改進,對ARM32 for Windows和Azure Active Directory for SQL Client的支持。此版本中最大的改進是在ASP.NET Core中。
ASP.NET Core 2.2和Entity Framework Core 2.2。
您可以在Windows,macOS和Linux上下載並開始使用.NET Core 2.2:
Visual Studio 15.9,Visual Studio for Mac和Visual Studio Code支持.NET Core 2.2 。
對於.NET Core和ASP.NET Core,可以在microsoft / dotnet上獲得Docker鏡像。
您可以在.NET Core 2.2發行說明中查看該發行版的完整詳細信息。發行說明中包含相關說明,已知問題和解決方法。請在評論或dotnet / core#2098中報告您發現的任何問題。
感謝為.NET Core 2.2做出貢獻的每個人。您已經幫助.NET Core成為更好的產品!
本次發布包含以下特性:
分層編譯(Tiered Compilation)
分層編譯是一種功能,使運行時能夠更自適應地使用實時(JIT)編譯器,以在啟動時獲得更好的性能並最大化吞吐量。它作為.NET Core 2.1中的選擇加入功能添加,然後在.NET Core 2.2 Preview 2中默認啟用。我們認為我們還沒有準備好在最終的.NET Core 2.2版本中默認啟用它,所以我們將其切換回選擇加入,就像.NET Core 2.1一樣。它在.NET Core 3.0中默認啟用,我們希望它保留在該配置中。
運行時事件(Runtime Events)
通常需要監視運行時服務(如當前進程的GC,JIT和ThreadPool),以了解這些服務在運行應用程序時的行為方式。在Windows系統上,這通常使用ETW並監視當前進程的ETW事件來完成。雖然這種方法仍然有效,但使用ETW並不總是容易或可能。無論您是在低權限環境中運行還是在Linux或macOS上運行,都可能無法使用ETW。
從.NET Core 2.2開始,現在可以使用EventListener類來使用CoreCLR事件。這些事件描述了GC,JIT,ThreadPool和interop的行為。它們是在Windows上作為CoreCLR ETW提供程序的一部分公開的相同事件。這允許應用程序使用這些事件或使用傳輸機制將它們發送到遙測聚合服務。
在SqlConnection中支持AccessToken
SQL Server的ADO.NET提供程序SqlClient現在支持將AccessToken屬性設置為使用Azure Active Directory對SQL Server連接進行身份驗證。要使用此功能,您可以使用Microsoft.IdentityModel.Clients.ActiveDirectory NuGet包中包含的Active Directory身份驗證庫for .NET獲取訪問令牌值。
以下示例顯示如何使用Azure Active目錄驗證SQL Server連接:
有關更多信息,請參閱ADAL.NET和Azure Active Directory文檔。
在Main之前註入代碼
.NET Core現在可以在通過Startup Hook運行應用程序main方法之前註入代碼。啟動掛鉤使主機可以在部署應用程序後自定義應用程序的行為,而無需重新編譯或更改應用程序。
我們希望託管服務提供商定義自定義配置和策略,包括可能影響主入口點的加載行為的設置,例如AssemblyLoadContext行為。鉤子可用於設置跟踪或遙測注入,設置回調以進行處理或其他依賴於環境的行為。鉤子與入口點分開,因此不需要修改用戶代碼。
有關更多信息,請參閱主機啟動掛鉤
Windows ARM32
我們正在添加對Windows ARM32的支持,類似於我們在.NET Core 2.1中添加的Linux ARM32支持。Windows已經支持使用Windows IoT Core的 ARM32一段時間了。作為Windows Server 2019發行版的一部分,還為Nanoserver添加了ARM32支持。.NET Core可以在Nanoserver和IoT Core上使用。
將在Docker Hub上的microsoft / dotnet上為ARM32的Nanoserver提供Docker。
我們遇到了一個遲到的錯誤,阻止我們今天發布針對Windows ARM32的.NET Core版本。我們預計這些版本將在2019年1月的.NET Core 2.2.1中使用。
平台支持
以下操作系統支持.NET Core 2.2:
- Windows客戶端:7,8.1,10(1607+)
- Windows Server:2008 R2 SP1 +
- MACOS:10.12+
- RHEL:6+
- Fedora:26歲以上
- Ubuntu的:16.04+
- Debian的:9+
- SLES:12+
- openSUSE的:42.3+
- 高山:3.7+
芯片支持如下:
- Windows,macOS和Linux上的x64
- Windows上的x86
- Linux上的ARM32(Ubuntu 16.04 +,Debian 9+)
- Windows上的ARM32(1809+; 1月份可用)