本周終於發佈了.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 分層編譯 ...
本周終於發佈了.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