Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Compiler verarbeiten den Code, den Sie schreiben, nach strukturierten Regeln, die sich häufig von der Art und Weise unterscheiden, wie Menschen Code lesen und verstehen. Ein grundlegendes Verständnis des modells, das von Compilern verwendet wird, ist unerlässlich, um die APIs zu verstehen, die Sie beim Erstellen von Roslyn-basierten Tools verwenden.
Compilerpipeline-Funktionsbereiche
Das .NET Compiler Platform SDK macht die Codeanalyse der C#- und Visual Basic-Compiler für Sie als Consumer verfügbar, indem sie eine API-Ebene bereitstellen, die eine herkömmliche Compilerpipeline widerspiegelt.
Jede Phase dieser Pipeline ist eine separate Komponente. Zunächst wird in der Analysephase der Quelltext tokenisiert und in eine Syntax umgewandelt, die der Grammatik der Sprache folgt. Zweitens analysiert die Deklarationsphase quell- und importierte Metadaten in form von benannten Symbolen. Als Nächstes gleicht die Bindungsphase Bezeichner im Code mit Symbolen ab. Schließlich gibt die Emit-Phase eine Assembly mit allen vom Compiler erstellten Informationen aus.
Entsprechend jeder dieser Phasen macht das .NET Compiler Platform SDK ein Objektmodell verfügbar, das den Zugriff auf die Informationen in dieser Phase ermöglicht. Die Analysephase macht eine Syntaxstruktur verfügbar, die Deklarationsphase macht eine hierarchische Symboltabelle verfügbar, die Bindungsphase macht das Ergebnis der semantischen Analyse des Compilers verfügbar, und die Emit-Phase ist eine API, die IL-Bytecodes erzeugt.
Jeder Compiler kombiniert diese Komponenten als einzelnes End-to-End-Ganzes.
Diese APIs sind dieselben, die von Visual Studio verwendet werden. Beispielsweise verwenden die Codegliederungs- und Formatierungsfunktionen die Syntaxbäume, der Objektbrowser und die Navigationsfunktionen verwenden die Symboltabelle, Umgestaltungen und "Gehe zu Definition" verwenden das semantische Modell, und "Bearbeiten und Fortsetzen" verwendet all diese, einschließlich der Emit-API.
API-Ebenen
Das .NET Compiler SDK besteht aus mehreren Ebenen von APIs: Compiler-APIs, Diagnose-APIs, Skript-APIs und Arbeitsbereich-APIs.
Compiler-APIs
Die Compilerebene enthält die Objektmodelle, die Informationen entsprechen, die in jeder Phase der Compilerpipeline verfügbar gemacht werden, sowohl syntaktisch als auch semantisch. Die Compilerebene enthält auch eine unveränderliche Momentaufnahme eines einzelnen Aufrufs eines Compilers, einschließlich Assemblyverweise, Compileroptionen und Quellcodedateien. Es gibt zwei unterschiedliche APIs, die die C#-Sprache und die Visual Basic-Sprache darstellen. Diese beiden APIs verfügen zwar über eine ähnliche Form, sind aber jeweils auf einen hohen Treuegrad in Bezug auf die einzelnen Sprachen ausgelegt. Diese Ebene hat keine Abhängigkeiten von Visual Studio-Komponenten.
Diagnose-APIs
Im Rahmen der Analyse kann der Compiler eine Reihe von Diagnosen erzeugen, die alles von Syntax, Semantik und eindeutigen Zuordnungsfehlern bis hin zu verschiedenen Warnungen und Informationsdiagnosen abdecken. Die Compiler-API-Ebene macht die Diagnose über eine erweiterbare API verfügbar, die es benutzerdefinierten Analysegeräten ermöglicht, an den Kompilierungsprozess angeschlossen zu werden. Es ermöglicht benutzerdefinierte Diagnosen, wie diejenigen, die von Tools wie StyleCop erzeugt werden, zusammen mit compilerdefinierten Diagnosen erstellt zu werden. Wenn Diagnosen so erstellt werden, hat dies den Vorteil, dass diese auf natürliche Weise in Tools wie MSBuild und Visual Studio integriert werden. Diese Tools sind von Diagnosen abhängig, um z. B. einen Build basierend auf Richtlinien anzuhalten oder Wellenlinien direkt im Editor anzuzeigen und Behebungen für Codefehler vorzuschlagen.
Skript-APIs
Host- und Skript-APIs basieren auf der Compilerebene. Sie können die Skript-APIs verwenden, um Codeausschnitte auszuführen und einen Laufzeitausführungskontext anzusammeln. Die interaktive C#-REPL (Read-Evaluate-Print Loop) verwendet diese APIs. Mit der REPL können Sie C# als Skriptsprache verwenden, während Sie ihn interaktiv ausführen.
Arbeitsbereich-APIs
Die Arbeitsbereichsebene enthält die Arbeitsbereichs-API, die den Ausgangspunkt für die Codeanalyse und die Umgestaltung über ganze Lösungen darstellt. Es unterstützt Sie beim Organisieren aller Informationen zu den Projekten in einer Lösung in einem einzelnen Objektmodell und bietet Ihnen direkten Zugriff auf die Compilerebenenobjektmodelle, ohne Dateien analysieren, Optionen konfigurieren oder Projekt-zu-Projekt-Abhängigkeiten verwalten zu müssen.
Darüber hinaus zeigt die Arbeitsbereichsebene eine Reihe von APIs an, die beim Implementieren von Codeanalyse- und Umgestaltungstools verwendet werden, die in einer Hostumgebung wie der Visual Studio-IDE funktionieren. Beispiele sind die APIs "Alle Verweise suchen", "Formatierung" und "Codegenerierung".
Diese Ebene hat keine Abhängigkeiten von Visual Studio-Komponenten.