.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
posted @ 2018-12-08 15:36 Ken.W 阅读(...) 评论(...) 编辑 收藏