Psaní textu šablony T4
Text šablony obsahuje text, který bude vygenerován z něj.Například šablony, která vytvoří webovou stránku, bude obsahovat "<html> …" a všechny ostatní standardní části stránky HTML.Vložit do šablony jsou řídicí bloky, které jsou fragmenty kódu programu.Řídicí bloky poskytují různé hodnoty a umožnit částí textu podmíněné a opakovaně.
Tato struktura snadné šablonu rozvíjet, protože začínají prototypu vytvořeného souboru a postupně vložit řídicí bloky, které výsledek lišit.
Text šablony se skládají z těchto částí:
Směrnic -prvky, které určují způsob zpracování šablony.
Textové bloky - obsahu, který zkopíruje přímo na výstup.
Bloky řízení -program kód, který vloží do textu hodnoty proměnných a řídí podmíněné nebo opakované části textu.
Chcete-li vyzkoušet příklady v tomto tématu je zkopírovat do souboru šablony popsaný v Generování kódu návrhu pomocí šablon Text T4.Po úpravě souboru šablony ji uložit a poté zkontrolujte výstup .txt souboru.
Směrnic
Text šablony směrnice stanoví obecné pokyny pro modul templating textu o generování kódu pro transformaci a výstupní soubor.
Například následující směrnice určuje, že výstupní soubor má příponu TXT:
<#@ output extension=".txt" #>
Další informace o direktivách naleznete v tématu T4 Text šablony směrnic.
Textové bloky
Blok textu vloží text přímo do výstupního souboru.Neexistuje žádné zvláštní formátování textových bloků.Například následující text šablony vytvoří textový soubor, který obsahuje slovo "Ahoj":
<#@ output extension=".txt" #>
Hello
Řídicí bloky
Řídicí bloky jsou části kódu programu používané k transformaci šablony.Je výchozí jazyk C#, ale pomocí Visual Basic, můžete psát na začátku souboru této směrnice:
<#@ template language="VB" #>
Jazyk, ve kterém píšete kód v řídicí bloky nesouvisí s jazyk textu, který je generován.
Standardní řídicí bloky
Standardní řídicí blok je části programového kódu, který generuje výstupní soubor.
Můžete používat libovolný počet bloků textu a standardní řídicí bloky v souboru šablony.Však nelze umístit jeden řídicí blok do druhého.Každý blok standardní ovládací prvek je vymezen symboly <# ... #>.
Například následující řídicí blok a blok textu způsobí výstupní soubor obsahuje řádek "0, 1, 2, 3, 4 Ahoj!":
<#
for(int i = 0; i < 4; i++)
{
Write(i + ", ");
}
Write("4");
#> Hello!
Namísto použití explicitní Write() příkazy, můžete interleave textu a kódu.Následující příklad vytiskne čtyřikrát "Ahoj!":
<#
for(int i = 0; i < 4; i++)
{
#>
Hello!
<#
}
#>
Text můžete vložit blokovat kdekoli Write(); prohlášení by povoleno v kódu.
[!POZNÁMKA]
Při vložení textového bloku v rámci složený příkaz, jako jsou například smyčky nebo podmíněné vždy používejte závorky {...} obsahovat textového bloku.
Řídicí bloky výraz
Řídicí blok výraz vyhodnocen jako výraz a převede na řetězec.Vloží se do výstupního souboru.
Řídicí bloky výrazu jsou odděleny symboly<#= ... #>
Například následující řídicí blok způsobí výstupní soubor obsahovat "5":
<#= 2 + 3 #>
Oznámení, že otevírání symbol má tři znaky "< # =".
Výraz může obsahovat libovolné proměnné, která je v oboru.Například vytiskne tento blok řádků s čísly:
<#@ output extension=".txt" #>
<#
for(int i = 0; i < 4; i++)
{
#>
This is hello number <#= i+1 #>: Hello!
<#
}
#>
Bloky řízení funkce třídy
Blok řízení funkce třídy definuje vlastnosti, metody nebo jiný kód, který není součástí by měly být hlavní transformace.Třída funkce bloky jsou často používány pro pomocné funkce.Obvykle bloky funkce třídy jsou umístěny v samostatných souborech, takže může být součástí více než jeden text šablony.
Třída funkce řídicí bloky jsou odděleny symboly<#+ ... #>
Například následující soubor šablony prohlašuje a používá metodu.
<#@ output extension=".txt" #>
Squares:
<#
for(int i = 0; i < 4; i++)
{
#>
The square of <#= i #> is <#= Square(i+1) #>.
<#
}
#>
That is the end of the list.
<#+ // Start of class feature block
private int Square(int i)
{
return i*i;
}
#>
Funkce musí být umístěna na konci souboru, ve kterém jsou zapsány.Můžete však <#@include#> soubor, který obsahuje funkce třídy, i když include směrnice následuje standardní bloky a text.
Další informace o řídicí bloky, viz Text šablony řídicí bloky.
Třída funkce bloky mohou obsahovat textové bloky
Metoda, která generuje text můžete psát.Příklad:
List of Squares:
<#
for(int i = 0; i < 4; i++)
{ WriteSquareLine(i); }
#>
End of list.
<#+ // Class feature block
private void WriteSquareLine(int i)
{
#>
The square of <#= i #> is <#= i*i #>.
<#
}
#>
Je zvláště užitečná pro metodu, která generuje text do samostatného souboru, který mohou obsahovat více než jednu šablonu.
Použití externích definice
Sestavení
Bloky kódu šablony lze použít typy, které jsou definovány nejčastěji používané.NET sestavení například System.dll.Kromě toho můžete odkazovat jiné.NET sestavení nebo vlastních sestav.Můžete zadat cestu nebo silný název sestavení:
<#@ assembly name="System.Xml" #>
By použít absolutní cestu názvy nebo názvy maker standardní použít v názvu cesty.Příklad:
<#@ assembly name="$(SolutionDir)library\MyAssembly.dll" #>
Seznam maker naleznete v tématu Makra pro sestavení příkazy a vlastnosti.
V sestavení směrnice nemá žádný účinek předzpracovány text šablony.
Další informace naleznete v tématu T4 Směrnice pro sestavení.
Obory názvů
Import směrnice je stejná jako using klauzule v C# nebo imports klauzule v jazyce Visual Basic.Umožňuje typy v kódu odkazovat bez použití úplného názvu:
<#@ import namespace="System.Xml" #>
Můžete použít tolik assembly a import směrnic, kterou chcete.Je nutné umístit před bloky textu a ovládací prvek.
Další informace naleznete v tématu T4 Import směrnice.
Včetně kódu a text
include Směrnice vloží text z jiného souboru šablony.Například vloží obsah v této směrnici test.txt.
<#@ include file="c:\test.txt" #>
Zahrnutý obsah je zpracována téměř, jako kdyby byla část šablony včetně textu.Však můžete zahrnout soubor, který obsahuje blok funkce třídy <#+...#> i v případě směrnice zahrnout následuje běžného textu a standardní řídicí bloky.
Další informace naleznete v tématu T4 Direktiva začlenění.
Nástroj metody
Existuje několik metod jako Write() , jsou vždy k dispozici v bloku řízení.Zahrnují metody napomáhají odsazení výstup a pro zasílání zpráv o chybách.
Můžete také napsat vlastní sadu pomocných metod.
Další informace naleznete v tématu Text šablony pomocné metody.
Transformace dat a modelů
Je nejužitečnější pro text šablony aplikace pro generování materiálu podle obsahu zdroje, například model, databáze nebo datový soubor.Šablony extrahuje a mění formát data.Kolekce šablon můžete transformovat tyto zdroje do více souborů.
Zdrojový soubor pro čtení několika způsoby.
Čtení souborů v šabloně text.Toto je nejjednodušší způsob, jak získat data do šablony:
<#@ import namespace="System.IO" #>
<# string fileContent = File.ReadAllText(@"C:\myData.txt"); ...
Načtení souboru jako splavných model.Výkonnější metodou je číst data jako model můžete procházet text kódu šablony.Můžete například načíst soubor XML a procházet s výrazy XPath.Můžete také použít xsd.exe vytvořte sadu tříd, které lze číst XML data.
**Upravte soubor modelu ve formuláři nebo diagramu.**Jazykové nástroje specifické pro doménu poskytuje nástroje, které umožňují upravit modelu diagramu nebo formuláře systému Windows.Usnadňuje diskutovat s uživateli generované aplikací modelu.Jazykové nástroje specifické pro doménutaké vytvoří sadu tříd silnými, které odrážejí strukturu modelu.Další informace naleznete v tématu Generování kódu z domény specifické pro jazyk.
Pomocí modelu UML.Z modelu UML může generovat kód.To má výhodu, že model může být upravena jako známé notace diagramu.Také není nutné návrh diagramuDalší informace naleznete v tématu Jak: generování souborů z modelu UML.
Relativní cesty k souborům
Pokud chcete odkazovat na soubor v umístění vzhledem k textu šablony, this.Host.ResolvePath().Je také nutné nastavit hostspecific="true" v template směrnice:
<#@ template hostspecific="true" language="C#" #>
<#@ output extension=".txt" #>
<#@ import namespace="System.IO" #>
<#
// Find a path within the same project as the text template:
string myFile = File.ReadAllText(this.Host.ResolvePath("MyFile.txt"));
#>
Content of MyFile.txt is:
<#= myFile #>
Také můžete získat další služby poskytované hostitele.Další informace naleznete v tématu Accessing Visual Studio or other Hosts from a Template.
Text šablony v samostatné domény AppDomain
Pamatujte, že text šablony spustí v AppDomain odděleném od hlavní aplikace.Ve většině případů není důležité, ale můžete zjistit omezení v některých případech složité.Například, pokud chcete předat data v šabloně nebo ze samostatné služby, pak služba musí poskytovat serializovatelný API.
Úpravy šablon
Speciální textové editory šablony lze stáhnout z Galerie Online Extension Manager.Na Nástroje nabídky, klepněte na tlačítko Extension Manager.Klepněte na tlačítko Galerie Onlinea potom pomocí nástroje pro hledání.
Příbuzná témata
Úloha |
Téma |
---|---|
Zápis do šablony. |
|
Text lze generovat pomocí kódu programu. |
|
Generovat soubory Visual Studio roztoku. |
|
Spuštění generování textu mimo Visual Studio. |
|
Transformace dat ve formuláři domény specifické pro jazyk. |
|
Směrnice procesorů transformace zdrojů dat zápisu. |