.NET Core 3.0 est disponible !

Le 23 septembre Microsoft à livré .NET Core 3.0 en release.

Voici un résumé des nouveautés de cette version très attendue :

Support du développement d’applications Windows Desktop

Une des nouveauté phare de cette version est la prise en charge native des applications desktop.
Il est donc désormais possible de créer des applications Windows Forms et WPF avec .NET Core sous Windows.
Bien sûr pour les applications de bureau de .NET Framework déjà existantes, Microsoft a veillé à faciliter leur migration vers .NET Core.

blog ai3 Winforms-vs-WPF .NET Core 3.0 est disponible !


Prise en charge JSON native haute performance

NET Core 3.0 inclut une nouvelle famille d’API JSON permettant des scénarios de lecture / écriture, un accès aléatoire avec un modèle de document (DOM) et un sérialiseur.
De nombreux utilisateurs sont probablement familiarisés avec l’utilisation de Json.NET.
Les nouvelles API sont conçues pour répondre à de nombreux scénarios identiques, mais avec moins de mémoire et une exécution plus rapide.

Microsoft a voulu créer une nouvelle API JSON qui tire parti de toutes les nouvelles fonctionnalités de performance de .NET Core tout en fournissant des performances de haut niveau.
Cela n’était pas possible avec la base de code existante de Json.NET en maintenant la compatibilité.

Voici la nouvelle API, couche par couche :

Utf8JsonReader
System.Text.Json.Utf8JsonReader est un lecteur hautes performances, à faible allocation, orienté uniquement vers l’avant pour le texte JSON codé en UTF-8, lu à partir d’un ReadOnlySpan.
Utf8JsonReader est un type fondamental, de bas niveau, qui peut être utilisé pour créer des analyseurs syntaxiques et des desérialiseurs personnalisés. La lecture d’une charge JSON à l’aide du nouveau Utf8JsonReader est deux fois plus rapide que celle du lecteur de Json.NET.
Il n’alloue pas tant que vous n’avez pas besoin d’actualiser les jetons JSON en tant que chaînes (UTF16).

Utf8JsonWriter
System.Text.Json.Utf8JsonWriter fournit un moyen hautement performant, non mis en cache, de transmettre uniquement du texte JSON codé en UTF-8 à partir de types .NET courants tels que String, Int32 et DateTime.
Comme le reader, le writer est un type fondamental, de bas niveau, qui peut être utilisé pour créer des sérialiseurs personnalisés.
L’écriture d’un contenu JSON à l’aide du nouvel utilitaire Utf8JsonWriter est 30 à 80% plus rapide que l’utilisation du writer de Json.NET.

JsonDocument
System.Text.Json.JsonDocument permet d’analyser des données JSON et de créer un DOM (Document Object Model) en lecture seule qui peut être interrogé pour prendre en charge l’accès et l’énumération aléatoires.
Il est construit au dessus de Utf8JsonReader.
Les éléments JSON qui composent les données sont accessibles via le type JsonElement exposé par le JsonDocument en tant que propriété appelée RootElement.
JsonElement contient les énumérateurs de tableau et d’objet JSON, ainsi que des API permettant de convertir du texte JSON en types .NET courants.
L’analyse d’un contenu JSON et l’accès à tous ses membres à l’aide de JsonDocument sont deux à trois fois plus rapides que Json.NET, avec très peu d’allocations pour des données de taille raisonnable (<1 Mo).

Sérialiseur JSON
Les couches System.Text.Json.JsonSerializer se trouvent au-dessus des systèmes hautes performances Utf8JsonReader et Utf8JsonWriter.
Il désérialise les objets à partir de JSON et sérialise les objets en JSON.
Les allocations de mémoire sont réduites au minimum et prennent en charge la lecture et l’écriture de JSON avec Stream de manière asynchrone.


Support de C# 8.0

Ajoutez des flux asynchrones, des plages / index, davantage de modèles et des types de référence nullables.
Nullable vous permet de cibler directement les failles de code qui conduisent à des exceptions de type NullReferenceException.
La couche la plus basse des bibliothèques de structure a été annotée afin que vous sachiez quand il faut s’attendre à null.

C # 8.0 introduit des types de référence nullables et des types de référence non nullables qui vous permettent de formuler des instructions importantes sur les propriétés des variables de type de référence :

  • une référence n’est pas censée être nulle :
    lorsque les variables ne sont pas censées être nulles, le compilateur applique des règles garantissant la possibilité de déréférencer ces variables en toute sécurité sans vérifier au préalable qu’elles ne sont pas nulles.
  • une référence peut être nulle :
    lorsque les variables peuvent être nulles, le compilateur applique différentes règles pour vous assurer que vous avez correctement vérifié la présence d’une référence nulle.

Cette nouvelle fonctionnalité offre des avantages importants par rapport au traitement des variables de référence dans les versions antérieures de C#, dans lesquelles l’intention lors du développement n’était pas possible à définir à partir de la déclaration de la variable.
Avec l’ajout de types de référence nullables, vous pouvez déclarer votre intention plus clairement et le compilateur vous aide à le faire correctement et à détecter les bogues dans votre code.

blog ai3 csharp-8-new .NET Core 3.0 est disponible !


Nouveau SqlClient

SqlClient est le fournisseur de données que vous utilisez pour accéder à Microsoft SQL Server et à la base de données Azure SQL, par l’intermédiaire de l’un des plus populaires .NET ORM, tels que EF Core ou Dapper, ou directement à l’aide des API ADO.NET.
Il va maintenant être publié et mis à jour en tant que package Microsoft.Data.SqlClient NuGet, et pris en charge pour les applications .NET Framework et .NET Core.
En utilisant NuGet, il sera plus facile pour l’équipe SQL de fournir des mises à jour aux utilisateurs .NET Framework et .NET Core.


Prise en charge de Linux ARM64

Microsoft a ajouté la prise en charge de Linux ARM64 dans cette version, après l’ajout de la prise en charge d’ARM32 pour Linux et Windows dans les versions 2.1 et 2.2 de .NET Core, respectivement.
Les puces Raspberry Pi et ARM sont désormais prises en charge pour permettre le développement IoT, y compris avec le débogueur Visual Studio distant.
Vous pouvez déployer des applications qui écoutent des capteurs et affichent des messages ou des images sur un écran, le tout à l’aide des nouvelles API GPIO. ASP.NET peut être utilisé pour exposer des données en tant qu’API ou en tant que site pour la configuration d’un périphérique IoT.


Mise à jour de ASP.NET Core et de Blazor

Les principales nouvelles fonctionnalités de cette version d’ASP.NET Core et de Blazor sont les suivantes:

  • création d’applications Web interactives côté client riches en utilisant C # au lieu de JavaScript avec Blazor,
  • création de services backend hautes performances avec gRPC (framework RPC),
  • SignalR prend désormais en charge la reconnexion automatique et la diffusion en continu d’un client à un serveur,
  • génération de code client fortement typé pour les API Web avec des documents OpenAPI,
  • routage des points d’extrémité intégré à travers le framework,
  • HTTP/2 est maintenant activé par défaut dans Kestrel,
  • prise en charge de l’authentification pour les API Web et les applications mono-page (SPA) intégrées à IdentityServer,
  • prise en charge du certificat et de l’authentification Kerberos,
  • intégration avec le nouveau sérialiseur System.Text.Json,
  • nouvelle configuration du host générique incluant des services courants tels que l’injection de dépendance, la configuration et les logs,
  • nouveau modèle de Worker Service pour la création de services de longue durée,
  • nouveau EventCounters créé pour obtenir les requêtes par seconde, le nombre total de requêtes, les requêtes en cours et les requêtes ayant échoué,
  • les erreurs de démarrage sont maintenant consignées dans le journal des événements Windows lorsqu’elles sont hébergées dans IIS,
  • nouveau pipeline de demandes intégré à System.IO.Pipelines,
  • amélioration des performances sur toute la pile.


F# 4.7

F# 4.7 est la nouvelle version de F# qui met l’accent sur les modifications d’infrastructure apportées au compilateur et à la bibliothèque principale, ainsi que quelques assouplissements sur les exigences de syntaxe précédemment onéreuses.

Cette nouvelle version a été entièrement développée sur la base de RFCs (request for comments) avec l’appui de la communauté F#.

blog ai3 Screen-Shot-2019-09-22-at-14.40.08 .NET Core 3.0 est disponible !


.NET Standard 2.1

Cette nouvelle version du standard .NET introduit de nouveaux types que vous pouvez utiliser dans le code pouvant être utilisé avec .NET Core et Xamarin.
.NET Standard 2.1 inclut tous les types depuis .NET Core 2.1.
Au total, il est prévu d’ajouter environ 3k APIs dans .NET Standard 2.1.
Une bonne partie d’entre elles sont des API nouvelles, tandis que d’autres sont des API existantes que Microsoft a ajoutées à la norme afin de faire converger davantage les implémentations .NET.

Voici les principales nouveautés du .NET Standard 2.1 :

  • Span<T> :
    c’est un type de tableau qui permet de représenter la mémoire gérée et non gérée de manière uniforme et qui prend en charge le découpage sans opération de copie,
  • API de base compatibles avec Span :
    de nombreuses API permettant de travailler avec Span ont été ajoutées, telles que Stream.Read(Span<Byte>),
  • Reflection emit :
    pour accroître la productivité, l’écosystème .NET a toujours fait un usage intensif de fonctionnalités dynamiques telles que la réflexion et l’émission de réflexion.
    Emit est souvent utilisé comme un outil d’optimisation des performances ainsi que comme moyen de générer des types à la volée pour des interfaces de proxy,
  • SIMD :
    .NET Framework et .NET Core supportaient SIMD depuis un moment.
    Microsoft les a utilisés pour accélérer les opérations de base dans la BCL, telles que les comparaisons de chaînes,
  • ValueTask and ValueTask<T> :
    dans .NET Core 2.1, la principale caractéristique consistait à améliorer les fondamentaux du framework afin de prendre en charge des scénarios hautes performances, ce qui incluait également une optimisation de l’efficacité async / wait.
    La ValueTask existe déjà et permet de renvoyer les résultats si l’opération est terminée de manière synchrone sans avoir à affecter une nouvelle tâche.
    Microsoft a amélioré cette fonctionnalité.
    Il était utile d’avoir une ValueTask non générique correspondante qui permet de réduire les allocations, même dans les cas où l’opération doit être terminée de manière asynchrone, une fonctionnalité utilisée actuellement par Socket et NetworkStream.
    Exposer ces API dans .NET Standard 2.1 permet aux auteurs de bibliothèques de bénéficier de ces améliorations, à la fois en tant que consommateur et producteur,
  • DbProviderFactories:
    dans .NET Standard 2.0, presque toutes les primitives dans ADO.NET pour permettre aux mappeurs O/R et aux implémenteurs de base de données de communiquer.
    DbProviderFactories permet aux bibliothèques et aux applications d’utiliser un fournisseur ADO.NET spécifique sans connaître ses types spécifiques au moment de la compilation, en effectuant une sélection parmi les instances enregistrées de DbProviderFactory en fonction d’un nom qui peut être lu, par exemple, dans les paramètres de configuration,
  • Divers :
    Microsoft a ajouté de nombreuses petites fonctionnalités dans les bibliothèques de classes de base telles que System.HashCode pour combiner des codes de hachage ou de nouvelles surcharges sur System.String.
    Il y a environ 800 nouveaux membres dans .NET Core et la plupart d’entre eux ont été ajoutés dans .NET Standard 2.1.
blog ai3 net_standard-1024x552 .NET Core 3.0 est disponible !


Compilation hiérarchisée

La compilation hiérarchisée (tiered compilation) a été ajoutée en tant que fonctionnalité opt-in dans .NET Core 2.1, elle était désactivée par défaut.
C’est une fonctionnalité qui permet au moteur d’exécution d’utiliser de manière plus adaptative le compilateur Just-In-Time (JIT) afin d’améliorer les performances, à la fois pour le démarrage et pour l’optimisation du débit.
Désormais elle est activé par défaut dans .NET Core 3.0.
Microsoft a apporté de nombreuses améliorations à cette fonctionnalité au cours cette année en la testant avec diverses charges de travail, notamment des sites Web, des applications de bureau PowerShell Core et Windows.
Les performances sont désormais bien meilleures, ce qui a permis à Microsoft de l’activer par défaut.

blog ai3 asp_net_startup-1024x489 .NET Core 3.0 est disponible !
blog ai3 asp_net_steady_state-1024x491 .NET Core 3.0 est disponible !
blog ai3 console_app_performance-1024x488 .NET Core 3.0 est disponible !


Support de TLS 1.3 et OpenSSL 1.1.1 sur Linux

.NET Core peut maintenant tirer parti de la prise en charge de TLS 1.3 dans OpenSSL 1.1.1.

Les principaux avantages de TLS 1.3 sont les suivants :

  • amélioration des temps de connexion grâce à une réduction du nombre d’allers et retours nécessaires entre le client et le serveur,
  • amélioration de la sécurité grâce à la suppression de divers algorithmes de chiffrement obsolètes et non sécurisés et au cryptage de plusieurs transactions.

.NET Core 3.0 peut utiliser ou OpenSSL 1.0.2, OpenSSL 1.1.0 ou OpenSSL 1.1.1.
Lorsque OpenSSL 1.1.1 est disponible, les types SslStream et HttpClient utilisent TLS 1.3 lorsqu’ils utilisent SslProtocols.None (protocoles par défaut du système), en supposant que TLS 1.3 soit pris en charge par le client et le serveur.

.NET Core prend donc désormais en charge TLS 1.3 sous Windows et macOS


Cryptographie

Microsoft a ajouté la prise en charge des chiffrements AES-GCM et AES-CCM, implémentée via System.Security.Cryptography.AesGcm et System.Security.Cryptography.AesCcm.
Ces algorithmes sont des algorithmes AEAD (Authenticated Encryption with Association Data), et ce sont les premiers algorithmes AE (Authenticated Encryption) ajoutés à .NET Core.

.NET Core 3.0 prend désormais en charge l’importation et l’exportation de clés publiques et privées asymétriques à partir de formats standard, sans avoir à utiliser de certificat X.509.


Nouvelle ère Japonaise (Reiwa)

Le 1er mai 2019, le Japon est entré dans une nouvelle ère appelée Reiwa. Les logiciels prenant en charge les calendriers japonais, tels que .NET Core, doivent être mis à jour pour prendre en charge Reiwa.
.NET Core et .NET Framework ont été mis à jour et gèrent correctement le formatage et l’analyse de dates japonaises avec la nouvelle ère.


Stratégie de mise à jour du runtime .NET Core

Le runtime .NET Core, plus précisément le binder du runtime, permet désormais d’activer en opt-in (facultatif) la montée de version majeure.
Le binder du runtime active aussi par défaut la restauration sur les versions correctives et les versions mineures.

Il existe désormais une propriété appelée RollForward, qui accepte les valeurs suivantes:

  • LatestPatch : passe à la version corrective la plus élevée.
    Cela désactive la stratégie mineure
  • Minor : avance vers la version mineure la plus basse, si la version mineure demandée est manquante.
    Si la version mineure demandée est présente, la stratégie LatestPatchest utilisée.
    C’est la politique par défaut,
  • Major : passe à la version majeure la plus élevée et à la version mineure la plus basse si la version majeure demandée est manquante. Si la version majeure demandée est présente, la stratégie mineure est utilisée,
  • LatestMinor : avance vers la version mineure la plus élevée, même si la version mineure demandée est présente,
  • LatestMajor : passage à la version majeure la plus importante et à la version mineure la plus élevée, même si la version majeure demandée est présente,
  • Disable : n’avance par vers une version plus élevée.
    Se lie uniquement à la version spécifiée.
    Cette stratégie n’est pas recommandée pour une utilisation générale, car elle désactive la possibilité de passer à la dernière version.
    Elle n’est recommandée que pour les tests .


Plateformes supportées

.NET Core 3.0 est supporté sur les systèmes d’exploitation suivants :

  • Alpine: 3.9+
  • Debian: 9+
  • openSUSE: 42.3+
  • Fedora: 26+
  • Ubuntu: 16.04+
  • RHEL: 6+
  • SLES: 12+
  • macOS: 10.13+
  • Windows Client: 7, 8.1, 10 (1607+)
  • Windows Server: 2012 R2 SP1+

Note: Windows Forms et les apps WPF ne sont supportés que sur Windows.

Le support des puces est le suivant :

  • x64 sur Windows, macOS, et Linux,
  • x86 sur Windows,
  • ARM32 sur Windows et Linux,
  • ARM64 sur Linux (kernel 4.14+).

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.