Kompilatör: En kompilator är ett program som konverterar källkod (originalspråk) skriven i ett programmeringsspråk till ett annat (målspråk). Kompilering är processen att översätta från källkod (vanligtvis ett högnivåspråk) till objektkod (vanligtvis ett lågnivåspråk eller maskinspråk) som kan köras direkt av en dator eller virtuell maskin.
På .NET-plattformen finns det två olika kompilatorer i olika skeden av modellen: en kallad Roslyn-kompilatorn, som kompilerar C#- och VB-kod till sammansättningar; Den andra kallas RyuJIT-kompilatorn, som kompilerar IL (mellanliggande språk) koden i assembleren till maskinkod.
Den här artikeln börjar med Roslyn-kompilatorn. Vi behöver inte fördjupa oss i hur det fungerar, utan för att förstå hur det fungerar, för att veta vad det kan användas till.
Inledningsvis var kompilatorn för C#-språket skriven i C++, och senare introducerade Microsoft en ny kompilator skriven i C#: Roslyn, som är en bootstrap-kompilator.
Bootstrap-kompilatorn innebär att kompilatorn för ett visst programmeringsspråk är skriven i själva språket. Varje version av bootstrap-kompilatorn kompileras med en version som föregick den, men dess första version måste kompileras av en kompilator skriven i ett annat språk, såsom Roslyns första version kompilerad av en kompilator skriven i C++. Många programmeringsspråk mognar och skriver egna kompilatorer med själva språket, såsom C# och Go.
På .NET-plattformen ansvarar Roslyn-kompilatorn för att kompilera C#- och VB-kod till assembler.
De flesta befintliga traditionella kompilatorer är "black box"-mönster som omvandlar källkod till exekverbara filer eller biblioteksfiler, och vi har inget sätt att veta vad som händer däremellan. Till skillnad från Roslyn tillåter Roslyn dig att komma åt varje steg i kodkompileringsprocessen via API:er.
Dess arbetsmekanism är pipeline-baserad, med fyra steg, där varje steg är en oberoende modul, och varje modul tillhandahåller ett motsvarande API. Integrerade utvecklingsmiljöer (IDE:er) kan använda dessa API:er för att erbjuda bekväma verktyg som förbättrar utvecklingseffektiviteten, såsom kodmarkering, smarta ledtrådar, refaktoreringsverktyg, prestandaanalysverktyg och mer. Dessutom kan utvecklare med Roslyn använda kompilatorn som en tjänst i sina egna program.
Utnyttja API:erna som Roslyn tillhandahåller för att dynamiskt generera kodprover
För det första, skapa ett nytt ClassLibraryGenerator-bibliotek och skapa ett .NET-standardbiblioteksprojekt som riktar sig mot netstandard2.0-ramverkets target framework-namn (TFM). Lägg till NuGet-paketen Microsoft.CodeAnalysis.Analyzers och Microsoft.CodeAnalysis.CSharp, csproj konfigureras enligt följande:
Skapa en ny C#-fil kallad TestSourceGenerator.cs som specificerar din egen källgenerator enligt följande:
Från kontextobjektet kan vi komma åt den kompilerade ingångspunkten eller huvudmetoden. En mainMethod-instans är en IMethodSymbol som representerar symbolen för en metod eller liknande metod (inklusive konstruktörer, destruktorer, operatorer eller attribut-/händelseaccessorer). Microsoft.CodeAnalysis.Compilation.GetEntryPoint-metoden returnerar programmets ingångspunkt IMethodSymbol. Andra metoder låter dig hitta vilken metodsymbol som helst i ditt projekt. I detta objekt kan vi härleda namnrymden (om den finns) och typen den innehåller. Källan i detta exempel är en interpolerad sträng som mallar källkoden som ska genereras, med de interpolerade luckorna som fyller det innehållna namnrymden och typinformationen. Lägg till källa i kontexten med promptnamnet. I detta exempel skapar byggaren en ny byggkällfil som innehåller implementeringen av den partiella metoden i konsolapplikationen. En källgenerator kan skrivas för att lägga till vilken favoritkälla som helst.
Skapa en ny ConsoleApp4-konsolapp (utan toppnivåsatser) med följande kod:
Samtidigt lägger du till ClassLibraryGenerator-projektreferensen, enligt följande:
Försök starta konsolappen med utgången enligt följande:
I Visual Studio, klicka på projektet "Dependencies" - > "Analyzer" - > "ClassLibraryGenerator" - > "ClassLibraryGenerator.TestSourceGenerator", dubbelklicka på filen "Program.g.cs" för att se den genererade koden, enligt följande:
Snabb:Att ändra byggarens kod kan kräva en omstart av Visual Studio för att se den。
Roslyn GitHub-adress:Inloggningen med hyperlänken är synlig.
Hänvisning:
Inloggningen med hyperlänken är synlig.
Inloggningen med hyperlänken är synlig.
Inloggningen med hyperlänken är synlig. |