.NET Core 2.2釋出一覽

Ken.W發表於2018-12-08

本週終於釋出了.NET Core 2.2,ASP.NET Core 2.2以及Entity Framework Core 2.2,雖然更大的新聞可能是.NET Core 3.0的特性公佈,但不妨先將現有的.NET Core版本升級到2.2,及時體驗一下新的功能。

.NET Core 2.2

分層編譯

分層編譯特性使得執行時可以更靈活地使用JIT編譯器,從而提升在啟動方面和最大化吞吐量上的效能。該特性在.NET Core 2.1時已作為可選特性加入其中,在.NET Core 2.2的預覽版本中被預設使用,而到了最終釋出階段,還是改回了可選特性。.NET Core 3.0之後或許會成為預設選項吧。

執行時事件

為了獲悉在執行應用程式時服務的工作情況,需要監測在當前程式中的諸如垃圾回收,JIT和執行緒池等執行時服務。在Windows系統中,一般ETW(Event Tracing for Windows) 的監測功能就可以滿足此要求。但在.NET Core 2.2之前,ETW的執行效果並不令人如意。
現在, 通過EventListener類可以使用CoreCLR事件。這些事件描述了垃圾回收,JIT,執行緒池和interop的行為。它們在Windows上作為CoreCLR ETW provider的一部分對外公開。這將允許應用程式可以使用這些事件,又或者使用傳輸機制傳送給其它監測服務。

在SqlConnection中提供對AccessToken的支援

SQL Server的ADO.NET provider,SqlClient,現在支援通過設定AccessToken屬性以認證使用Azure Active Directory的SQL Server連線。該屬性包含在Microsoft.IdentityModel.Clients.ActiveDirectory類庫裡。

在Main方法之前插入程式碼

現在通過Startup Hook可以在執行應用程式的Main方法之前插入特定的程式碼。對於已經發布的應用程式,不用重新編譯或者改變程式,Startup Hook能夠定製所需的行為。

Windows ARM32

與.NET Core 2.1中對Linux ARM32支援相似的,在.NET Core 2.2里加入了對Windows ARM32的支援。但在釋出時遇到了較嚴重的bug,所以可能在之後的版本中,比如2019年1月即將釋出的.NET Core 2.1.1中會真正附加此特性。

平臺支援

NET Core 2.2支援下列作業系統:

  • Windows Client: 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+

晶片支援包括:

  • x64 on Windows, macOS, and Linux
  • x86 on Windows
  • ARM32 on Linux (Ubuntu 16.04+, Debian 9+)
  • ARM32 on Windows (1809+; available in January)

ASP.NET Core 2.2

這次的更新主要是為了提高開發者的生產力以及增強建立Web/HTTP API的功能。同時,也在效能方面有所改善。這些更新包含以下幾點:

  • 與Swagger類庫更好地整合,程式碼分析提供了設計時檢查。
  • 引入終端路由,提升了MVC中20%的路由效能
  • 改進LinkGenerator的URL生成,支援路由引數轉換
  • 加入了對於應用程式的健康進行監測新API(此功能來源自和BeatPulse專案的整合)
  • 由於程式內託管的支援,在IIS上提升了400%的吞吐量
  • 提升了15%的MVC模型驗證效能
  • 在MVC中加入了對問題明細(Problem Details)(RFC 7807)的支援
  • 在ASP.NET Core中可以預覽對HTTP/2 server的支援
  • 對於Bootstrap 4與Angular 6模板的升級
  • 提供了ASP.NET Core SignalR的Java客戶端
  • 在Linux上提升了60%的HTTP客戶端效能,同時在Windows上提升了20%

Entity Framework Core 2.2

支援空間資料

空間資料可以用於表示物理距離和目標形狀。在EF Core 2.2中藉助NetTopologySuite類庫的幫助對空間資料提供了支援。當前已支援的資料庫包括SQL Server,SQlite和PostgreSQL。

所有型實體(owned entity)集合

所有型實體中僅可以出現其它實體型別的導航屬性。
EF Core 2.0中新加了一對一關聯的所有型實體,而在EF Core 2.2中則進一步地擴充套件到了一對多的關聯。

查詢標籤

該特性簡化了程式碼中Linq語句與日誌中生成的SQL語句之間的關聯。

加上標籤的方法是TagWith。

  var nearestFriends =
      (from f in context.Friends.TagWith(@"This is my spatial query!")
      orderby f.Location.Distance(myLocation) descending
      select f).Take(5).ToList();

最後生成的SQL語句中包含了Linq程式碼中附加的標籤。

-- This is my spatial query!

SELECT TOP(@__p_1) [f].[Name], [f].[Location]
FROM [Friends] AS [f]
ORDER BY [f].[Location].STDistance(@__myLocation_0) DESC

相關文章