Textmallens omvandlingsprocess

Omvandlingsprocessen för textmallen tar en textmallfil som indata och genererar en ny textfil som utdata. Du kan till exempel använda textmallar för att generera Visual Basic- eller C#-kod, eller så kan du generera en HTML-rapport.

Tre komponenter deltar i den här processen: motorn, värden och direktivprocessorerna. Motorn styr processen; Den interagerar med värden och direktivprocessorn för att skapa resultatfilen. Värden tillhandahåller all interaktion med miljön, till exempel att hitta filer och sammansättningar. Direktivprocessorn lägger till funktioner, till exempel att läsa data från en XML-fil eller en databas.

Omvandlingsprocessen för textmallen utförs i två steg. Först skapar motorn en tillfällig klass, som kallas för den genererade transformeringsklassen. Den här klassen innehåller den kod som genereras av direktiven och kontrollblocken. Därefter kompilerar och kör motorn den genererade transformeringsklassen för att skapa utdatafilen.

Components

Komponent Description Anpassningsbar (Ja/Nej)
Engine Motorkomponenten styr omvandlingsprocessen för textmallar Nej.
Host Host är gränssnittet mellan motorn och användarmiljön. Visual Studio är en värd för texttransformeringsprocessen. Ja. Du kan skriva en anpassad värdtjänst.
Direktivprocessorer Direktivprocessorer är klasser som hanterar direktiv i textmallar. Du kan använda direktiv för att tillhandahålla data till en textmall från en indatakälla. Ja. Du kan skriva processorer för anpassade direktiv

Motorn

Motorn tar emot mallen som en sträng från värddatorn, som hanterar alla filer som används i omvandlingsprocessen. Sedan ber motorn värden att lokalisera eventuella anpassade direktivprocessor och den övriga miljöns aspekter. Motorn kompilerar och kör sedan den genererade transformeringsklassen. Motorn returnerar den genererade texten till värden, vilket normalt sparar texten i en fil.

Värden

Värden ansvarar för allt som har att göra med miljön utanför omvandlingsprocessen, inklusive följande:

  • Hitta text och binära filer som begärs av motorn eller en direktivprocessor. Värden kan söka i kataloger och den globala assembly-cachen för att hitta assemblies. Värden kan hitta processorkoden för det anpassade direktivet för motorn. Värden kan också hitta och läsa textfiler och returnera dessa som strängar.

  • Tillhandahålla listor över standardsammansättningar och namnområden som används av motorn för att skapa den genererade transformeringsklassen.

  • Tillhandahålla den programdomän som används när motorn kompilerar och kör den genererade transformeringsklassen. En separat programdomän används för att skydda värdprogrammet från fel i mallkoden.

  • Skriver den genererade utdatafilen.

  • Ange standardtillägget för den genererade utdatafilen.

  • Hantera omvandlingsfel för textmallar. Värden kan till exempel visa felen i användargränssnittet eller skriva dem till en fil. (I Visual Studio visas fel i fönstret Felmeddelande.)

  • Ange ett obligatoriskt parametervärde om en användare har anropat ett direktiv utan att ange något värde. Direktivprocessorn kan ange namnet på direktivet och parametern och be värdanordningen att tillhandahålla ett standardvärde om värdanordningen har ett.

Direktiv och direktivprocessorer

Ett direktiv är ett kommando i textmallen. Det ger parametrar till genereringsprocessen. Vanligtvis definierar direktiv modellens källa och typ eller andra indata samt filnamnstillägget för utdatafilen.

En direktivprocessor kan bearbeta ett eller flera direktiv. När du transformerar en mall måste du ha installerat en direktivprocessor som kan hantera direktiven i mallen.

Direktiv fungerar genom att lägga till kod i den genererade transformeringsklassen. Du anropar direktiv från en textmall och motorn bearbetar alla direktivanrop när den skapar den genererade transformeringsklassen. När du har anropat ett direktiv kan resten av koden som du skriver i textmallen förlita sig på de funktioner som direktivet innehåller. Du kan till exempel göra följande anrop till import direktivet i mallen:

<#@ import namespace="System.Text" #>

Standarddirektivprocessorn konverterar detta till en using -instruktion i den genererade transformeringsklassen. Du kan sedan använda StringBuilder klassen i resten av mallkoden utan att kvalificera den som System.Text.StringBuilder.