Semantic API Roslyn pour les Source Generators (Code Gen)
La Semantic API de Roslyn complète la Syntax API en donnant accès à la compréhension “sémantique” du code : types réels, symboles, héritage, interfaces implémentées, attributs résolus, etc. Dans un Source Generator, c’est elle qui permet de passer d’un simple nœud de syntaxe à un modèle riche sur lequel baser la génération de code.
Dans cet article, on va voir :
- ce qu’est un
SemanticModel; - comment obtenir des
ISymbol(types, méthodes, propriétés) à partir de la syntaxe ; - comment lire les attributs et types effectifs ;
- comment utiliser efficacement la Semantic API dans un générateur incrémental.
Syntax API Roslyn pour les Source Generators (Code Gen)
La Syntax API de Roslyn est le point d’entrée bas niveau pour analyser le code C# dans un Source Generator. Elle permet de parcourir l’arbre de syntaxe (AST) des fichiers .cs pour repérer les éléments qui vous intéressent (attributs, classes, méthodes…) avant de générer du code.
Dans cet article, on va voir :
- ce qu’est un arbre de syntaxe ;
- comment utiliser un
ISyntaxReceiver(générateurs classiques) ; - comment retrouver les symboles à partir de la syntaxe ;
- comment aborder la Syntax API dans un générateur incrémental.
Source Generators en .NET (Code Gen)
Les Source Generators sont une fonctionnalité introduite avec .NET 5 et C# 9 qui permet de générer du code C# à la compilation, à partir du code existant. Contrairement aux outils de génération de code “hors bande” (T4, scripts, etc.), les source generators s’intègrent directement au compilateur Roslyn et fonctionnent de manière transparente dans Visual Studio, Rider ou VS Code.
Ils sont particulièrement utiles pour :
- Éviter le code répétitif (boilerplate).
- Générer du code optimisé à partir de métadonnées (attributs, fichiers JSON, etc.).
- Fournir de l’intellisense et des diagnostics au moment de l’écriture du code.
Cibler plusieurs frameworks .NET dans un même projet
Lorsqu’une bibliothèque doit être utilisable par plusieurs types d’applications (.NET Framework, .NET Core, .NET moderne, etc.), il est possible de cibler plusieurs frameworks .NET dans un même projet. Cette technique est appelée multi‑ciblage (multi‑targeting).
L’idée est simple : un seul projet .csproj, plusieurs frameworks cibles, et le SDK .NET génère un assembly par framework.
Commandes Git avancées (et méconnues)
Les commandes git status, git commit ou git push sont bien connues. Mais Git cache aussi une série d’outils plus avancés, très utiles au quotidien et pourtant rarement utilisés.
Dotnet et SQL : bonnes pratiques pour éviter les erreurs courantes
Voici une liste de bonnes pratiques pour éviter les erreurs courantes lors de l’utilisation de SQL dans une application .NET (que ce soit avec Entity Framework Core, Dapper ou ADO.NET).
Évolution du schéma et versionning en CQRS (cqrs 6/6)
Dans un système CQRS, le modèle d’écriture, les modèles de lecture et, le cas échéant, les événements d’Event Sourcing évoluent dans le temps ; il faut donc faire progresser le schéma et les contrats (commands, events, read models) sans casser les agrégats existants, les projections ni les consommateurs externes, en combinant versionning, migrations et reconstructions contrôlées.
CQRS et Event Sourcing (cqrs 5/6)
La combinaison de CQRS et d’Event Sourcing consiste à séparer lecture et écriture tout en conservant, côté écriture, l’historique complet des événements qui construisent les agrégats ; les mêmes événements alimentent ensuite des projections pour bâtir des modèles de lecture optimisés, avec à la clé auditabilité, rejouabilité et vues multiples au prix d’une complexité accrue.
37 articles, 5 pages.