Lorsque Microsoft a annoncé C#8, .NET Core 3.1 et toutes les nouveautés (je ferai probablement des vidéos là dessus aussi !), j'étais complètement fou !

Folie !

Oui oui, j'aime bien les gifs animés ... Mais :

J'ai de suite pensé : tiens, si je profitais de certaines nouveautés dans CQELight (comme par exemple les IAsyncEnumerable).

#instant pub

Pour ceux qui ne savent pas, Hybrid Technologies Solutions dispose d'une solution sous forme de package, open-source et gratuite, pour gérer les problématiques d'architecture en C# .NET. Vous pouvez la télécharger gratuitement pour vos projets directement depuis Nuget.org : https://www.nuget.org/packages?q=cqelight

#instant pub terminé

Donc, ni une, ni deux, je migre mes packages en netstandard 2.1 et là ... Le drame 😱. Pourquoi ? Car netstandard 2.1, c'est .NET Core 3.0+ et, dans la logique LTS et vu que CQELight colle à cela, j'ai décidé qu'on supportera les LTS de .NET Core. Donc, il faut supporter .NET Core 2.1 et avoir une version netstandard 2.0.

Fallait-il pour autant abandonner tout espoirt de pouvoir utiliser toutes ces nouveautés (tant en terme de productivité que de performance) 😢 ?

Eh bien non ! Mais comment me direz-vous ? Et bien, avec le nouveau format de csproj 🤩, il est possible de cibler non pas seulement une version, mais plusieurs (ici, on se limite à deux, c'est déjà cool !).

Comment on fait ? Assez simplement en fait. Commencez par créer un projet de Bibliothèque de classes en .NET standard (soit avec Visual Studio, soit en ligne de commande avec dotnet new classlib).

Maintenant que votre projet est créé, éditez le csproj de ce dernier. Normalement, dans la première balise PropertyGroup, vous devriez avoir TargetFramework qui contient netstandard2.0 (ou netstandard2.1 dépendant de comment est configuré votre environnement, sdk et tout le toutim).

Et là, petit subilité.

Migrez le champ TargetFramework par TargetFrameworks (avec un s à la fin), puis, dans le contenu de la balise, vous pouvez rajouter des ; avec d'autres cibles.

Vous allez donc passer de  👉

<TargetFramework>netstandard2.0</TargetFramework>

à 👉

<TargetFrameworks>netstandard2.0;netstandard2.1</TargetFrameworks>

(par exemple)

First step : done ✔️

Il ne reste plus qu'à profiter des nouveautés netstandard 2.1 dans votre code.

Comme ça ? Attendez ... y a pas un truc magique là 🧙‍♂️ ? On rajoute juste la version dans TargetFramework et c'est bon, on peut tout utiliser n'importe quand ?

Pas vraiment ... Si c'était si simple, ça se saurait !

Une fois dans votre code, vous allez devoir utiliser des directives de précompilation dans votre code.

Pour netstandard2.1 par exemple, vous allez mettre :

#if netstandard2.1

// Votre code

#endif

Si vous voulez un fichier complet d'exemple : https://github.com/hybrid-technologies-solutions/CQELight/blob/develop/src/CQELight.AspCore/Extensions/ASPCoreExtensions.cs

Voilà, maintenant vous savez comment créer une libraire qui sera disponible sur plusieurs cibles et vous pourrez utiliser les nouveautés sans vous priver !

Comments


Comments are closed