Since two years after the 1.0 version, .NET Core has gained a lot of popularity in the software engineering world. The following chart came from the Stack overflow survey 2018:

Stack overflow survey 2018: .NET Core

Stack overflow survey 2018

Nowadays, .NET Core is in the top 5 of the most popular Frameworks, Libraries, and Tools.

The metaphor of dwarfs standing on the shoulders of giants expresses the meaning of discovering truth by building on previous discoveries and experience. The point is that the .NET team has learnt from their previous experiences and .NET Core is the result of that experiences applied to a new multi-platform framework.

I have already write about .NET Core here: Developing token authentication using ASP.NET CoreImplementing SOLID REST API using ASP.NET CoreUnit testing ASP.NET Core Identity.

The framework is movin’ fast, each new release enhance and sometimes change features of the framework. The following article shows some highlights and new feature which are present in the new version of .NET Core 2.1 and ASP.NET Core 2.1.

.NET Core 2.1

The .NET team have been thinking of .NET Core 2.1 as a feedback-oriented release after the more foundational .NET Core 2.0 release.  Let’s see some highlights on .NET Core 2.1:

  • Span<T>, Memory<T> introduction;
  • Windows compatibility pack;
  • Build-time performance improvement;

Span , Memory introduction

.NET Core comes with a new set of types for using arrays and other types of memory that is much more efficient. Furthermore, Span<T> and Memory<T>  are part of the System.Memory.dll package, the preview of this package is available on NuGet and it is compatibile with .NET Standard 1.1.

Actually, Span<T> and Memory<T> concept goes behind the consumer-use side. Indeed, these new types became useful under the hood of the framework, e.g. for the HttpClient, in order to improve the performance.

If you are looking for more relevant information about the performance improvement and to go in deep on these types,  please take a look to : All About Span: Exploring a New .NET Mainstay

Windows compatibility pack

The Windows compatibility pack package is useful for all the developers who want to port existing .NET Framework code to .NET Core. It increases the APIs surface to an additional 20k APIs. You can download the package at the following link : https://www.nuget.org/packages/Microsoft.Windows.Compatibility  The packages also provides some useful APIs in order to detect the hosting OS, for example:

RuntimeInformation.IsOSPlatform(OSPlatform.Windows)

Since it detects if the current OS platform is Windows, it may be useful in order to execute different code depending on the type of platform.

In addition, Microsoft has also released the following package: API Analyzer.

API Analyzer is a Roslyn analyzer that comes as NuGet package. After referencing it in your project, it automatically provides live feedback on API usage and warns about potential compatibility issues and calls to deprecated APIs.

Build-time performance improvement

The following chart provides some informations about the improvement. It compares the previous version of .NET Core with the new-one:

As you can see, in .NET 2.1 preview the build time for WebSmall project is of 2.7 sec, furthermore for the WebLarge project, the build time is 22.5 sec. The .NET team goal is to improve it with the new .NET Core 2.1 RTM version. Their plan is drop that again to 6.8 sec for WebLarge project.

ASP.NET Core 2.1

Let’s talk about ASP.NET Core 2.1. The new release is targeted for mid-year 2018. It covers some improvements and features on following areas: Razor pages, SignalR, Webhooks, Security, Perfomance, MVC, Kestrel;

Here is some highlights and new stuff from next release.

HttpClientFactory

The HttpClientFactory brings the concept of dependency injection to HttpClient implementation. It provides a central location to manage and instantiate all HttpClient.

The HttpClientFactory integrates Polly.NET. Polly is a .NET resilience and transient-fault-handling library that allows developers to express policies such as Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner.

HttpClientFactory has two different approaches: NamedClient, TypedClient;

NamedClient

The NamedClient is the default choice.

The method AddHttpClient defines a new namespace which can be used to refer the client inside your services and controllers:

TypedClient

The other way is by referring directly the typed client. You can define a typed client by injecting the HttpClient inside the constructor of new classes, that approach, very DI oriented, is the one I prefer:

As you can see, it allows you to register and inject directly the typed client:

Kestrel: Socket over libuv

The current implementation of Kestrel uses libuv under the hood. The implementation of the underlying libuv connection semantics has been decoupled from the rest of Kestrel and abstracted away into a new Transport abstraction. By the way, for performance reasons, Microsoft is investing on custom socket implementation inside .NET.  The sockets will replace the libuv async I/O.

Furthermore, it is already possible to configure and try socket transportation, to do that you should configure it on the application Program.cs:

HTTPS

Nowadays, HTTPS is the default choice. Some browsers, like Chrome, starts to apply security policies behind HTTP web applications, please see: Marking HTTP As Non-Secure.

Core 2.1 comes with https by default. In other words, in addition to listing on http://localhost:5000, Kestrel will listen on https://localhost:5001 when a local development certificate is present. .NET Core SDK will install a suitable certificate by default.

Final thoughts

In conclusion, the new releases 2.1 provides a lot of useful improvements. As said before, it is based on feedback and suggestion which comes from consumers. It will also introduce some other new stuff, such as  web hooks adapted on different provides and also it will re-introduce SignalR. For more information about the high-level planning and its related issues/features at the following link: Announcements/issues/288.

Some referral content and useful links here:

.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

Cheers 🙂

Cover picture by Corrado Zeni

About Samuele Resca

Samuele Resca is an Microsoft MVP Visual Studio and Development Technologies, Software Engineer, specializing mainly on ASP.NET MVC and in general about everything that revolves around the web. Samuele was born in 1994, and works as a software developer @ YOOX NET-A-PORTER Group He loves the MVC frameworks, ASP.NET MVC, Javascript, Node.js and Typescript.