Accueil Nos publications Blog [Retour Microsoft Experiences] Nouveautés .NET Core 3

[Retour Microsoft Experiences] Nouveautés .NET Core 3

La conférence MS Experiences de Microsoft a été l’occasion d’entendre de nombreux retours d’expérience de consultants sur un large panel de technologies et d’architectures. C# et .Net étaient bien sûr à l’honneur avec deux présentations, l’une sur le langage C# et l’autre sur les nouveautés de .Net Core 3, présentée par Sébastien Pertus (MS). Ce retour concerne cette dernière session.

Entity Framework

Entity Framework est l’ORM de base de la plateforme .Net et existe en deux versions, la version Framework et la version Core. Afin de permettre aux développeurs de passer sur .Net Core et de migrer plus facilement, la version 6.3 de Entity Framework sera prise en charge par .Net Core. Il est bien sûr recommandé de passer sur la version Core le plus rapidement possible, car aucune annonce sur la fin éventuelle de cette prise en charge n’a été faite.

Au rang des nouveautés spécifiques à EF.Core, nous avons :

  • La gestion des relations Many-to-Many, très demandée
  • L’introduction des Value Converter, les classes permettant de transformer les valeurs insérées et récupérées lors du mapping entre la base et l’objet .Net
  • La possibilité d’utiliser le Lazy loading, attention aux impacts sur les performances !
  • Un nouvel Analyzer dans Visual Studio pour alerter lorsqu’une commande SQL dans le code ne sera pas paramétrée, et ainsi éviter de potentielles injections SQL
  • Il sera possible d’interfacer EF.Core avec CosmosDB directement !

ASP.Net Core 3

ASP.Net Core 3 a également été présenté, avec plus de nouvelles limitations que de nouvelles possibilités !

Dans les limitations :

  • Ne fonctionne que sur .NET Core 3 ! Impossible de l’utiliser sur .NET Framework. L’objectif est de permettre des rythmes d’évolution différents entre les versions Core et Framework. Core aurait de nouvelles features plus fréquemment car Framework conserverait la rétro-compatibilité. Plus d’infos et d’avis sur ces pages : GitHub_aspnet_Announcements & GitHub_aspnet_AspNetCore
  • Suppression des dépendances à JSON.Net et à EF.Core. Pourquoi JSON.Net ? James Newton-King, le mainteneur du package a précisé qu’il ne pouvait pas utiliser certaines nouveautés de .Net Core (ex : Span) sans casser la rétro-compatibilité. Pour éviter un futur goulot d’étranglement, l’équipe Core prévoit de créer leur propre API JSON et de laisser le choix aux développeurs quant à la librairie JSON qu’ils souhaitent utiliser. Plus d’infos ici : GitHub_dotnet_announcements

Dans les nouveautés :

  • Une commande “dotnet dev-certs” pour générer un nouveau certificat de dev, pour le cas où celui généré de base est perdu/expiré. Utile !
  • Un nouveau type de projet “Razor Class Library” pour créer des composants Razor réutilisables. Il est possible de surcharger la configuration du site qui utilise le composant dans le composant de la lib, ou à l’inverse de surcharger le composant dans le site qui l’utilise.
    Pour surcharger le composant RCL, il suffit de reproduire l’arborescence du composant dans le site qui l’utilise et de créer le fichier à surcharger. Si le composant a une arborescence en Areas/Composant/Main.cshtml, il suffira de créer un fichier Main.cshtml dans Areas/Composant sur le site.
    À l’inverse, il faut utiliser les chemins exacts du site pour surcharger des éléments du site dans le composant RCL. Si l’on souhaite surcharger un fichier standard comme Views/Shared/_Layout.cshtml, il suffira de créer le même fichier avec la même arborescence dans le composant. Attention peut-être à ne pas surcharger de fichiers trop spécifiques, au risque de rendre son composant impossible à réutiliser.

Nouveautés .Net Core 3

La grosse nouveauté de cette version 3 est la prise en charge des applications Winforms et WPF dans .Net Core ! C’est la première fonctionnalité non cross-plateforme du framework. Cela permet de migrer certaines applications dans .Net Core, mais en quoi cela est utile ? M.Pertus nous a apporté un début de réponse avec une petite application de démo faisant le décompte des fichiers présents sur le disque. La même application est deux fois plus rapide en Core qu’en Framework !
Pour ceux qui souhaitent essayer tout de suite, le designer Visual Studio pour les forms ne prend pas encore en charge les applications Winforms .Net Core. Pour pallier à ce souci, M.Pertus conseille de créer un projet Winforms avec .Net Framework dans la solution, puis de faire un symlink entre les forms Core et Framework, ce qui permettra d’utiliser le designer de la version Framework.

Autre nouveauté, l’ajout des tools pour dotnet. Ces outils sont des plugins qui permettent de faire à peu près tout et n’importe quoi, du calcul d’un hash MD5 à la gestion des issues sur github, le tout en ligne de commande. Ces tools sont installés en global sur la machine pour l’instant. Plus d’informations, et la liste des tools recommandés

Il est également possible d’ajouter un fichier “global.json” dans un répertoire pour préciser quelle version de dotnet est à utiliser dans ce répertoire. Exemple de fichier :


 {
   "sdk": {
     "version": "2.1.300"
   }
 }

Comme on le voit, c’est très simple mais il faut la version exacte ! Plus d’informations

Une nouveauté très intéressante est le “Package trimming”. Aujourd’hui, un artifact .Net Core contenant une application console vide fait 64Mo, le package “Package trimming” réduit les dépendances de l’artifact à celles nécessaires pour faire tourner l’application.
Avec ce package et l’option suivante :

/p:TrimUnusedDependencies=true

la taille du package est réduite de 40Mo! (GitHub)

Core RT : Aussi appelé .Net Native, cet outil permet de compiler une application .Net Core en un seul fichier exécutable spécifique à une plateforme (Windows/Linux/OS X). Ce fichier contient l’application ainsi que toutes les dépendances nécessaires, rien de plus n’est à installer ! À noter que pour l’instant seules les applications console sont compatibles. (GitHub)

Conclusion

Voilà très rapidement les nouveautés à surveiller de la prochaine version de .Net Core !
Si l’on a beaucoup de petites nouveautés qui nous amélioreront la vie, il faudra surveiller les changements structurels apportés à ASP.Net Core et voir comment les intégrer à nos projets existants.