站在巨人肩上的.NET Core 2.1

.NET Core 1.0自发布两年以来,得到了开发者群体相当高地认可。 下图来自Stack overflow survey 2018的统计:

站在巨人肩上的.NET Core 2.1

.NET Core已经成为前五的主流框架工具,现今借鉴了优秀的设计原则和开发体验可谓站在巨人肩上。这一切归功于.NET团队认识和总结了大量过往的经验教训,看到了跨平台的重要性。关于.NET Core的一些介绍:

Developing token authentication using ASP.NET Core

Implementing SOLID REST API using ASP.NET Core

Unit testing ASP.NET Core Identity

.NET Core还在快速迭代,每次更新都有一些特性的增强。下面介绍一些.NET Core 2.1和ASP.NET Core 2.1的新功能。

.NET Core 2.1

相较于重视基础构建的.NET Core 2.0,.NET Core 2.1更像是一个面向反馈的版本。

Span , Memory介绍

.NET Core推出了一些高性能的新数组和内存类型,例如在 System.Memory.dll中的Span<T>Memory<T>,.NET Standard 1.1可以在NuGet找到兼容的预览版本。实际上Span<T> 和Memory<T>的想法来自于调用方的使用需要。这些新类型在框架体系中将非常实用。例如用在HttpClient中改进性能。更多的内容参见:All About Span: Exploring a New .NET Mainstay

Windows 兼容包

The Windows兼容包将造福于那些想把基于.NET Framework的代码迁移至.NET Core的开发者,为此新的框架增加了成吨的API接口(你可以从这里下载:https://www.nuget.org/packages/Microsoft.Windows.Compatibility)。例如其中一个检测宿主操作系统类型的方法:RuntimeInformation.IsOSPlatform(OSPlatform.Windows),当需要根据不同平台来运行不同依赖的代码时非常有用。更有意思的还有API Analyzer,从NuGet包可以获取到这个来自Roslyn的分析器,项目中引用后会自动提供API使用和警告的实时反馈,对于那些存在潜在兼容问题或失效的API将有不错的体验。

站在巨人肩上的.NET Core 2.1

构建时的性能提升

下图是.NET Core新老版构建时长的对比。可以看到较大的项目,其构建时长能节省一倍多,估计正式版本还会进一步优化。

站在巨人肩上的.NET Core 2.1

ASP.NET Core 2.1

再看看2018年年中前后要发布的ASP.NET Core 2.1,改动将不限于Razor pages、SignalR、Webhooks、Security、Perfomance、MVC、Kestrel等。

HttpClientFactory

HttpClientFactory将为HttpClient内置一个依赖注入的实现,并提供了HttpClient实例化和管理的控制单元。HttpClientFactory还集成了Polly.NET。Polly拥有瞬时错误处理和恢复的类库,支持开发者以便捷、线程安全的方式实现一系列策略,类似重试、中断、超时、隔离和反馈等。HttpClientFactory有两种不同的处理模型:NamedClient, TypedClient

NamedClient

NamedClient是默认选项,它的AddHttpClient方法用来在客户端处为服务或控制器定义了一个命名空间。

TypedClient

这是一种直接通过类型引用的方式,可以在调用类的内部将HttpClient注入到构造函数中,对于喜欢IoC的开发者来说值得推荐。

 

如你所见,它允许你使用注册或注入客户端两种方式。

Kestrel: 基于libuv的Socket

当前Kestrel使用libuv作为底层实现,在Transport abstraction中将Kestrel的传输方式以抽象的方式解耦,顺便提一下,出于性能考虑,微软打算实现一个自定义的socket来替代libuv的异步IO,在Program.cs中以配置的形式获得socket传输能力。 

HTTPS

如今HTTPS成了标配,像Chrome一类的浏览器, 在HTTP的Web应用背后都有安全策略,参见:Marking HTTP As Non-Secure。ASP.NET Core 2.1将默认HTTPS,也就是说,即使在本地开发环境监听http://localhost:5000,,Kestrel也将要求一个证书而监听https://localhost:5001,.NET Core SDK会在安装时默认会生成一个适当的证书。

综述

一句话总结,新的.NET Core 2.1版本提供了大量的实用提升,正如开头所说,这些和.NET开发者们积极地建议和反馈密不可分。更有一些新的东西加入,比如在不同适配器下的Web hookst和改头换面的SignalR。

更多高阶的研发计划和相关功能、问题信息参见:Announcements/issues/288.

或者你还想看看这些:

.NET Core 2.1 roadmap 
ASP.NET Core 2.1 roadmap 
All About Span: Exploring a New .NET Mainstay 
.NET 2.1 Roadmap Pt.1 - Channel9

 

(原文:.NET Core 2.1 highlights: standing on the shoulders of giants