Inzicht in het .NET Compiler Platform SDK-model

Compilers verwerken de code die u schrijft volgens gestructureerde regels die vaak verschillen van de manier waarop mensen code lezen en begrijpen. Een basiskennis van het model dat door compilers wordt gebruikt, is essentieel voor het begrijpen van de API's die u gebruikt bij het bouwen van op Roslyn gebaseerde hulpprogramma's.

Functionele gebieden van compilerpijplijn

De .NET Compiler Platform SDK maakt de codeanalyse van C# en Visual Basic-compilers beschikbaar voor u als consument door een API-laag te bieden die een traditionele compilerpijplijn weerspiegelt.

steps of the compiler pipeline processing source code to object code

Elke fase van deze pijplijn is een afzonderlijk onderdeel. Eerst worden met de parseringsfase de brontekst geparseerd en geparseerd in syntaxis die volgt op de taal grammatica. Ten tweede analyseert de declaratiefase de bron en geïmporteerde metagegevens om benoemde symbolen te vormen. Vervolgens komt de bindingsfase overeen met id's in de code met symbolen. Ten slotte verzendt de emit-fase een assembly met alle informatie die door de compiler is opgebouwd.

compiler pipeline api provides access to each step that is part of the compiler pipeline

Overeenkomstig elk van deze fasen maakt de .NET Compiler Platform SDK een objectmodel beschikbaar dat toegang biedt tot de informatie in die fase. De parseringsfase toont een syntaxisstructuur, de declaratiefase maakt een hiërarchische symbooltabel weer, de bindingsfase geeft het resultaat van de semantische analyse van de compiler weer en de emit-fase is een API die IL-bytecodes produceert.

the language services available from the compiler api at each step of the compiler pipeline

Elke compiler combineert deze onderdelen als één end-to-end geheel.

Deze API's zijn dezelfde api's die worden gebruikt door Visual Studio. De code-overzichts- en opmaakfuncties maken bijvoorbeeld gebruik van de syntaxisstructuren, de objectbrowser en navigatiefuncties maken gebruik van de symbooltabel, herstructureringen en Go to Definition maken gebruik van het semantische model, en Bewerken en Doorgaan maakt gebruik van al deze, inclusief de Emit-API.

API-lagen

De .NET-compiler-SDK bestaat uit verschillende lagen API's: compiler-API's, diagnostische API's, script-API's en werkruimte-API's.

Compiler-API's

De compilerlaag bevat de objectmodellen die overeenkomen met informatie die wordt weergegeven in elke fase van de compilerpijplijn, zowel syntactisch als semantisch. De compilerlaag bevat ook een onveranderbare momentopname van één aanroep van een compiler, waaronder assemblyverwijzingen, compileropties en broncodebestanden. Er zijn twee afzonderlijke API's die de C#-taal en de Visual Basic-taal vertegenwoordigen. De twee API's zijn vergelijkbaar in vorm, maar zijn afgestemd op hoge kwaliteit voor elke afzonderlijke taal. Deze laag heeft geen afhankelijkheden van Visual Studio-onderdelen.

Diagnostische API's

Als onderdeel van de analyse kan de compiler een set diagnostische gegevens produceren waarin alles wordt beschreven, van syntaxis, semantische en definitieve toewijzingsfouten tot verschillende waarschuwingen en informatieve diagnostische gegevens. De compiler-API-laag maakt diagnostische gegevens beschikbaar via een uitbreidbare API waarmee door de gebruiker gedefinieerde analyses kunnen worden aangesloten op het compilatieproces. Hiermee kunnen door de gebruiker gedefinieerde diagnostische gegevens, zoals die worden geproduceerd door hulpprogramma's zoals StyleCop, worden geproduceerd naast door compiler gedefinieerde diagnostische gegevens. Het produceren van diagnostische gegevens op deze manier heeft het voordeel van integratie op natuurlijke wijze met hulpprogramma's zoals MSBuild en Visual Studio, die afhankelijk zijn van diagnostische gegevens voor ervaringen zoals het stoppen van een build op basis van beleid en het weergeven van live golvende lijnen in de editor en het voorstellen van codeoplossingen.

Script-API's

Host- en script-API's zijn gebouwd boven op de compilerlaag. U kunt de script-API's gebruiken om codefragmenten uit te voeren en een runtime-uitvoeringscontext te verzamelen. De interactieve REPL van C# (Read-Evaluate-Print Loop) maakt gebruik van deze API's. Met de REPL kunt u C# gebruiken als scripttaal, waarbij de code interactief wordt uitgevoerd terwijl u deze schrijft.

Api's voor werkruimten

De werkruimtelaag bevat de Werkruimte-API. Dit is het startpunt voor het uitvoeren van codeanalyse en het herstructureren van volledige oplossingen. Het helpt u bij het ordenen van alle informatie over de projecten in een oplossing in één objectmodel, zodat u rechtstreeks toegang hebt tot de objectmodellen van de compilerlaag zonder dat u bestanden hoeft te parseren, opties hoeft te configureren of project-naar-project-afhankelijkheden hoeft te beheren.

Daarnaast wordt in de laag Werkruimten een set API's weergegeven die worden gebruikt bij het implementeren van codeanalyse en herstructureringshulpprogramma's die werken binnen een hostomgeving, zoals de Visual Studio IDE. Voorbeelden hiervan zijn de API's voor het zoeken naar alle verwijzingen, opmaak en codegeneratie.

Deze laag heeft geen afhankelijkheden van Visual Studio-onderdelen.