Microsoft annonce la sortie de .NET Core 2.1,
Avec de nombreux ajouts et améliorations qui viennent enrichir cet environnement

Le , par François DORIN, Responsable .NET & Magazine
Microsoft a annoncé aujourd'hui la publication de l'environnement .NET Core : .NET Core 2.1, ASP.NET Core 2.1 et Entity Framework Core 2.1.

De nombreux ajouts et améliorations viennent donc enrichir cet environnement, notamment :
  • amélioration des performances ;
  • amélioration des outils ;
  • possibilité de déployer des outils via NuGet ;
  • support des types Span<T> et Memory<T>.

Pour rappel, .NET Core est disponible pour Windows, MacOS et Linux et est supporté par Visual Studio 15.7, par Visual Studio for Mac, et par Visual Studio Code, en plus d'être disponible en tant qu'image Docker (disponible dans le dépôt microsoft/dotnet).

Support
La version 2.1 sera une version LTS (Long Term Support). Cela signifie que le support pour cette version sera de 3 ans. Le futur est encore de mise dans la mesure où cette version ne sera déclarée LTS que d'ici quelques mois, le temps d'effectuer de petites mises à jour.

D'ici là, n'hésitez donc pas à utiliser cette nouvelle version pour vos projets en cours de développement. Pour les projets déjà déployés, il est recommandé d'attendre quelques mois pour effectuer la migration.

Plateformes supportées

Avec cette version, .NET Core supporte officellement de nouvelles plateformes (en gras dans la liste suivante) :
  • Windows Client: 7, 8.1, 10 (1607+) ;
  • Windows Server: 2008 R2 SP1+ ;
  • macOS: 10.12+ ;
  • RHEL: 6+ ;
  • Fedora: 26+ ;
  • Ubuntu: 14.04+ ;
  • Debian: 8+ ;
  • SLES: 12+ ;
  • openSUSE: 42.3+ ;
  • Alpine: 3.7+.

Et les processeurs supportés sont :
  • x64 sous Windows, macOS, et Linux ;
  • x86 sous Windows ;
  • ARM32 sous Linux (Ubuntu 18.04+, Debian 9+).

Au niveau matériel, .NET Core 2.1 est supporté sur les raspberry basés sur un processeur ARMv7 ou ARMv8 (Rapsberry Pi 2 et ultérieurs), mais pas sur ceux basés sur un processeur ARMv6 (Raspberry Pi, Raspberry Pi Zero).

Amélioration des performances

Un énorme travail a été effectué depuis la version 2.0 de .NET Core pour l'amélioration des performances.

Tout d'abord, via la réduction des temps de compilation.


Comme vous pouvez le constater, les temps de compilation ont été largement réduits, notamment pour les gros projets, où la réduction peut atteindre un facteur 10 !

Mais aussi d'un point de vue exécution, où certaines opérations ont particulièrement été optimisées, comme le boxing (réduction de 90%), de nombreuses méthodes (comme String.IndexOf), dans la gestion des threads et bien d'autres encores. (vous pouvez retrouver une comparaison des performances assez complète dans cet article de blog paru sur la MSDN).

Compatibilité avec les versions précédentes de .NET Core

Cette nouvelle version de .NET Core est une version hautement compatible. Les applications .NET Core 2.0 tourneront sur .NET Core 2.1 sans nécessiter .NET Core 2.0. Cette compatibilité n'est assurée que pour les versions mineures, c'est-à-dire qu'une application .NET Core 1.1 ne sera pas compatible avec .NET Core 2.0, de la même manière que les applications .NET Core 2.x ne seront pas compatibles avec .NET Core 3.0 (quand il sera disponible, bien entendu !).

De nouvelles fonctionnalités

Cette nouvelle version de .NET Core vient également avec son lot de fonctionnalités.

Parmi les plus attendus, on peut citer le support des Span<T> et Memory<T> introduit avec C 7.2 et permettant de manipuler aisément toutes zones de mémoires contigües, et notamment faire référence à des sous-ensembles, sans avoir à réaliser une copie de la mémoire.

On peut noter également la présence d'un nouvel alogirhtme de compression : https://fr.wikipedia.org/wiki/Brotli...ression Brotli.

La cryptographie n'est pas en reste non plus, avec de nombreux ajouts :
  • nouvelle API SignedCms (dans l'espace de noms System.Security.Cryptography.Pkcs.SignedCms disponible dans l'assembly System.Security.Cryptography.Pkcspackage) ;
  • nouvelle surcharge pour X509Certificate.GetCertHash avec le support de SHA-2 ;
  • nouvelle API cryptographique basée sur Span<T>, permettant le calcul de hash, la génération de nombres aléatoires, la génération de signatures, etc. ;
  • amélioration des performances de Rfc2898DeriveBytes qui est 15% plus rapide ;
  • ajout de la classe CryptographicOperations, qui implémente des opérations de manière cryptographiquement sûre ;
  • ajout de la méthode statique RandomNumberGenerator.Fill ;
  • support de EnvelopedCms sur toutes les plateformes (incluant donc Linux et macOS) ;
  • ajout du support des courbes elliptiques de Diffie=Hellman (Elliptic-Curve Diffie-Hellman ou ECDH) ;
  • support de RSA-OAEP-SHA2 et RSA-PSS sur toutes les plateformes (et donc Linux et maCOS).


Windows Compatibility Pack

Le Windows Compatibility Pack est un ensemble de 20 000 API supplémentaires pour .NET Core, mais uniquement disponible pour les systèmes Windows. Cela permet de convertir plus en douceur un plus grand nombre d'applications du framework historique vers le framework .NET Core.

Compilateur JIT : la compilation par couche

Toujoues dans l'optique d'optimiser les performances, une nouvelle fonctionnalité liée au compilateur JIT et appelée compilation par couches (Tiered Compilation). Encore à ses débuts, cette fonctionnalité n'est qu'une première version et sera très certainement amenée à évoluer par la suite. Pour en bénéficier, il faut définit une variable d'environnement COMPlus_TieredCompilation="1".

Mais la compilation par couches, qu'est-ce que c'est ? Le compilateur JIT traduit en temps réel, lors de la première exécution d'un code, le code managé en code natif. Cette étape de compilation est effectuée durant l'exécution du programme et peut donc être impactée négativement les performances. Une compilation optimisée demande du temps (et donc à un impact majeur lors de la compilation), mais permet d'avoir des exécutions consécutives plus performantes. A contrario, une compilation sans optimisation permet une compilation plus rapide au détriment des performances futures.

La compilation par couches permet de résoudre ce problème, en commençant par une compilation simple, sans optimisation, et en procédant éventuellement à d'autres compilations plus optimisées par la suite, en fonction des besoins. Ainsi, un code qui n'est exécuté qu'une fois sera compilé rapidement, et l'impact sur le temps d'exécution du programme sera donc mince. Par contre, un code exécuté de nombreuses fois sera recompilé par le compilateur JIT avec des optimisations plus poussées. Cette compilation se fait en parallèle et viendra remplacer la précédente une fois terminée, minimisant alors l'impact d'une compilation avec optimisation sur le déroulement de l'application.

Débogage : lien vers la source

Une fonctionnalité bien pratique dans le cadre du débogage : le lien vers la source (SourceLink).

Il s'agit, lors de la distribution d'un packet NuGet, de pouvoir préciser un lien pour le téléchargement des sources (par exemple, un dépôt GitHub). Ainsi, lors du débogage, il sera possible de déboguer le code d'un paquet et d'en comprendre le moindre méandre.

La capture d'écran ci-dessous montre le débogage d'un paquet NuGet référencé par une application, avec la source du paquet automatiquement téléchargé depuis un dépôt GitHub sous Visual Studio 2017.


Source : blog MSDN

Et vous ?

Que pensez-vous des nouveautés de .NET Core 2.1 annoncées jusqu'ici ?
Comptez-vous tester .NET Core 2.1 ?

Voir aussi :
Microsoft annonce la disponibilité de .NET Core 2.1 RC1
.NET Framework 4.7.2 est disponible, avec le support de l'injection de dépendance dans les Web Forms et la sécurisation de cookies avec SameSite
Visual Studio Code 1.23 est disponible : tour d'horizon des nouveautés dans l'éditeur de code open source et multiplateformes de Microsoft
Feuille de route de Visual Studio 2017 : Microsoft donne un aperçu des prochaines fonctionnalités, pour les deuxième et troisième trimestres 2018
Microsoft publie la deuxième préversion de Visual Studio 2017 version 15.7, la prochaine mise à jour mineure de son EDI
.NET Framework 4.7.1 est disponible, avec le support de .NET Standard 2.0 et une amélioration des performances du ramasse-miettes


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :
Responsables bénévoles de la rubrique Microsoft DotNET : Hinault Romaric - François DORIN -