Partager via


Comprendre le modèle SDK de la plateforme du compilateur .NET

Les compilateurs traitent le code que vous écrivez en suivant des règles structurées qui diffèrent souvent de la façon dont les humains lisent et comprennent le code. Une compréhension de base du modèle utilisé par les compilateurs est essentielle pour comprendre les API que vous utilisez lors de la création d’outils basés sur Roslyn.

Zones fonctionnelles du pipeline du compilateur

Le SDK de la plateforme de compilateur .NET expose l’analyse du code des compilateurs C# et Visual Basic à vous en tant que consommateur en fournissant une couche d’API qui reflète un pipeline de compilateur traditionnel.

étapes du pipeline du compilateur qui traite le code source vers le code objet

Chaque phase de ce pipeline est un composant distinct. Tout d’abord, la phase d’analyse segmente et analyse le texte source dans la syntaxe grammaticale du langage utilisé. Deuxièmement, la phase de déclaration analyse les métadonnées sources et importées pour former des symboles nommés. Ensuite, la phase de liaison associe les identificateurs du code aux symboles. Enfin, la phase d’émission émet un assemblage avec toutes les informations élaborées par le compilateur.

L’API de pipeline du compilateur fournit l’accès à chaque étape qui fait partie du pipeline du compilateur

Correspondant à chacune de ces phases, le Kit de développement logiciel (SDK) de la plateforme du compilateur .NET expose un modèle objet qui permet d’accéder aux informations à cette phase. La phase d’analyse expose une arborescence de syntaxe, la phase de déclaration expose une table de symboles hiérarchiques, la phase de liaison expose le résultat de l’analyse sémantique du compilateur et la phase d’émission est une API qui produit des codes d’octets IL.

les services de langage disponibles à partir de l’API du compilateur à chaque étape du pipeline du compilateur

Chaque compilateur combine ces composants ensemble sous la forme d’un seul ensemble de bout en bout.

Ces API sont les mêmes que celles utilisées par Visual Studio. Par exemple, les fonctionnalités de mise en forme et de plan du code utilisent les arborescences de syntaxe, l’Explorateur d’objets et les fonctionnalités de navigation utilisent la table de symboles, les refactorisations et Go to Definition utilisent le modèle sémantique, et Modifier et Continuer les utilise toutes, y compris l’API Emit.

Couches d’API

Le SDK du compilateur .NET se compose de plusieurs couches d’API : API du compilateur, API de diagnostic, API de script et API d’espaces de travail.

API du compilateur

La couche du compilateur contient les modèles objet qui correspondent aux informations exposées à chaque phase du pipeline du compilateur, à la fois syntaxique et sémantique. La couche du compilateur contient également un instantané immuable d’un appel unique d’un compilateur, y compris les références d’assembly, les options du compilateur et les fichiers de code source. Il existe deux API distinctes qui représentent le langage C# et le langage Visual Basic. Les deux API sont similaires en forme, mais adaptées pour une haute fidélité à chaque langue individuelle. Cette couche n’a aucune dépendance sur les composants Visual Studio.

API de diagnostic

Dans le cadre de son analyse, le compilateur peut produire un ensemble de diagnostics couvrant tout, de la syntaxe, de la sémantique et des erreurs d’affectation définitives aux différents avertissements et diagnostics informationnels. La couche API du compilateur expose les diagnostics via une API extensible qui permet aux analyseurs définis par l’utilisateur d’être branchés au processus de compilation. Il permet aux diagnostics définis par l’utilisateur, tels que ceux produits par des outils tels que StyleCop, d’être produits en même temps que les diagnostics définis par le compilateur. La production de diagnostics de cette façon offre l’avantage de s’intégrer naturellement à des outils tels que MSBuild et Visual Studio, qui dépendent des diagnostics pour des expériences telles que l’arrêt d’une build basée sur la stratégie et l’affichage des écumes dynamiques dans l’éditeur et la suggestion de correctifs de code.

API de script

Les API d’hébergement et de script sont basées sur la couche du compilateur. Vous pouvez utiliser les API de script pour exécuter des extraits de code et accumuler un contexte d’exécution du runtime. Le REPL (Read-Evaluate-Print Loop) interactif C# utilise ces API. RepL vous permet d’utiliser C# comme langage de script, en exécutant le code de manière interactive lorsque vous l’écrivez.

API d’espaces de travail

La couche Espaces de travail contient l’API Espace de travail, qui est le point de départ de l’analyse du code et de la refactorisation sur l’ensemble des solutions. Il vous aide à organiser toutes les informations sur les projets d’une solution dans un modèle objet unique, ce qui vous permet d’accéder directement aux modèles objet de la couche compilateur sans avoir à analyser les fichiers, à configurer des options ou à gérer les dépendances de projet à projet.

En outre, la couche Espaces de travail expose un ensemble d’API utilisées lors de l’implémentation d’outils d’analyse du code et de refactorisation qui fonctionnent dans un environnement hôte comme l’IDE Visual Studio. Les API Rechercher toutes les références, la mise en forme et la génération de code sont des exemples.

Cette couche n’a aucune dépendance sur les composants Visual Studio.