Generování kódu návrhu pomocí šablon Text T4
Návrhu T4 text šablony umožňují generování kódu programu a další soubory ve vašem Visual Studio projektu.Obvykle zapisujete šablony tak, aby se liší podle data generují kód model.Model je soubor nebo databázi, která obsahuje důležité informace o požadavcích vaší aplikace.
Například můžete mít model, který definuje pracovní postup, buď jako tabulku nebo diagram.Z modelu můžete generovat software, který spustí pracovní postup.Při změně požadavky uživatelů, je snadné diskutovat nový pracovní postup pro uživatele.Obnovení kódu z pracovního postupu je spolehlivější než aktualizace kódu ručně.
[!POZNÁMKA]
A model je zdroj dat, který popisuje jednotlivé aspekty aplikace.Mohou být všechny formuláře v jakýkoli typ souboru nebo databázi.Nemá být jakékoli konkrétní tvar modelu UML nebo model domény pro konkrétní jazyk.Typické modely jsou ve formě tabulky nebo soubory XML.
Pravděpodobně jste obeznámeni s generování kódu.Při definování zdroje v .resx soubor ve své Visual Studio řešení, sadu tříd a metod je generován automaticky.Soubor prostředků je mnohem jednodušší a spolehlivější upravit prostředky než by bylo upravit třídy a metody.Text šablony může generovat kód stejným způsobem ze zdroje vlastního návrhu.
Šablony text obsahuje směs text, který chcete vygenerovat a programový kód, který generuje proměnné části textu.Kód aplikace a umožňuje opakovat nebo části textu generovaných podmíněně vynechat.Generovaný text sám může, je kód programu, který je součástí aplikace.
Vytvoření šablony T4 Text návrhu
Vytvoření šablony T4 návrhu v aplikaci Visual Studio
Vytvořit Visual Studio projektu nebo otevřít existující.
Například soubor nabídce zvolte Nový, projektu.
Přidat do projektu soubor šablony text a zadejte jeho název, který má příponu .tt.
To provést, v Průzkumníku, v místní nabídce projekt zvolte Přidat, Nová položka.V Přidat novou položku dialogovém okně vyberte Text šablony z podokna uprostřed.
Všimněte si, že Vlastní nástroj vlastnost souboru je TextTemplatingFileGenerator.
Otevřete soubor.Již bude obsahovat následující direktivy:
<#@ template hostspecific="false" language="C#" #> <#@ output extension=".txt" #>
Pokud jste přidali do šablony Visual Basic projektu, bude atribut language "VB".
Přidáte text na konec souboru.Příklad:
Hello, world!
Uložte soubor.
Možná najdete Upozornění zabezpečení okno zprávy s žádostí o potvrzení spuštění šablony.Klikněte na tlačítko OK.
V Průzkumníku, rozbalte uzel souboru šablony a soubor, který má příponu TXT.Soubor obsahuje text vytvořený z šablony.
[!POZNÁMKA]
Pokud váš projekt je projekt aplikace Visual Basic, musíte klepnout na Zobrazit všechny soubory -li zobrazit výstupního souboru.
Kód pro obnovení
Bude proveden šablonu generování pomocný soubor v některém z následujících případů:
Upravit šablonu a potom změňte fokus na jiný Visual Studio okno.
Uložte šablonu.
Klepněte na Všechny šablony transformace v sestavení nabídky.Toto převede všechny šablony Visual Studio řešení.
V Průzkumníku, v místní nabídce jakéhokoli souboru, zvolte Spustit vlastní nástroje.Tuto metodu lze použijte k transformaci podmnožinu šablon vybrané.
Můžete také nastavit Visual Studio projektu šablony jsou spouštěny, když jste změnili datové soubory, které mohou číst.Další informace naleznete v tématu Obnovení automaticky kód.
Generování proměnné textu
Text šablony umožňují použít kód programu měnit obsah generovaného souboru.
Generování textu pomocí kódu programu
Změnit obsah .tt souboru:
<#@ template hostspecific="false" language="C#" #> <#@ output extension=".txt" #> <#int top = 10; for (int i = 0; i<=top; i++) { #> The square of <#= i #> is <#= i*i #> <# } #>
<#@ template hostspecific="false" language="VB" #> <#@ output extension=".txt" #> <#Dim top As Integer = 10 For i As Integer = 0 To top #> The square of <#= i #> is <#= i*i #> <# Next #>
.Tt soubor uložit a znovu zkontrolovat soubor generovaný txt.Zobrazí seznam čtverců čísel od 0 do 9.
Všimněte si, že příkazy jsou uzavřeny <#...#>a jeden výrazů v <#=...#>.Další informace naleznete v tématu Psaní textu šablony T4.
Pokud píšete generování kódu Visual Basic, template směrnice by měla obsahovat language="VB"."C#"je výchozí.
Ladění Text šablony návrhu T4
Ladění text šablony:
Vložit debug="true" do template směrnice.Příklad:
<#@ template debug="true" hostspecific="false" language="C#" #>
Nastavit zarážky stejným způsobem jako u běžných kódu v šabloně.
Zvolte Debug šablony T4 z místní nabídky Šablona textového souboru v Průzkumníku řešení.
Šablona spustí a zastaví na zarážce.Lze zkoumat proměnné a kód krokovat obvyklým způsobem.
Tip
debug="true"Díky generovaný kód přesněji mapovat text šablony vložit další řádek číslování směrnic do generovaného kódu.Pokud ji ponecháte, zarážky může zastavit spustit v chybném stavu.
Ale směrnice šablony lze ponechat klauzule, i když nejsou ladění.To způsobí, že velmi malé přetažení výkonu.
Generování kódu nebo prostředky pro řešení
Můžete generovat soubory programů, které se liší podle modelu.Model je vstup jako databáze, konfigurační soubor, modelu UML, DSL model nebo jiného zdroje.Několik obvykle generovat soubory programů jsou ze stejného modelu.K dosažení tohoto cíle, vytvoříte soubor šablony pro každý program generovaný soubor a všechny šablony čtení stejný model.
Generovat kód programu nebo prostředky
Změna směrnice výstupní soubor odpovídající typ, například .cs, VB, RESX nebo XML.
Vložte kód, který bude generovat kód řešení, které požadujete.Například, pokud chcete generovat tři celočíselné pole prohlášení ve třídě:
<#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".cs" #> <# var properties = new string [] {"P1", "P2", "P3"}; #> class MyGeneratedClass { <# foreach (string propertyName in properties) { #> private int <#= propertyName #> = 0; <# } #> }
<#@ template debug="false" hostspecific="false" language="VB" #> <#@ output extension=".cs" #> <# Dim properties = {"P1", "P2", "P3"} #> class MyGeneratedClass { <# For Each propertyName As String In properties #> private int <#= propertyName #> = 0; <# Next #> }
Uložte soubor a kontrolovat generovaný soubor, který nyní obsahuje následující kód:
class MyGeneratedClass { private int P1 = 0; private int P2 = 0; private int P3 = 0; }
Generování kódu a generovaný Text
Při generování kódu programu je nejdůležitější, aby se zabránilo matoucí generování kódu, který spouští v šabloně a výsledné generovaný kód, který se stane součástí vašeho řešení.Dva jazyky nemají stejné.
V předchozím příkladu má dvě verze.V jedné verzi je generování kódu v jazyce C#.Ostatní verze je generování kódu jazyka Visual Basic.Ale oba generovaný text je stejný a je třída C#.
Stejným způsobem můžete použít Visual C# šablony pro generování kódu v jazyce.Generovaný text nemusí být v určitém jazyce a nemá být kód aplikace.
Strukturování textu šablony
Jako vhodné jsme mají tendenci kód šablony rozdělit do dvou částí:
Konfigurace nebo části shromažďování dat, které nastaví hodnoty proměnných, ale neobsahuje textové bloky.V předchozím příkladu je tato část inicializace properties.
V části "model" to se někdy nazývá protože konstrukce modelu v úložišti a obvykle přečte soubor modelu.
Část textu generace (foreach(...){...} v příkladu), který používá hodnoty proměnných.
Není nezbytné oddělení, ale je styl, který usnadňuje čtení snižováním složitosti část, která obsahuje text šablony.
Čtení souborů nebo jiných zdrojů
Přístup k databázi nebo soubor modelu, můžete použít šablony kódu sestavení jako System.XML.Chcete-li získat přístup k těmto sestavením, musíte vložit směrnic, jako jsou tyto:
<#@ assembly name="System.Xml.dll" #>
<#@ import namespace="System.Xml" #>
<#@ import namespace="System.IO" #>
assembly Směrnice zpřístupní zadané sestavení vašeho kódu šablony stejným způsobem jako v části odkazy Visual Studio projektu.Není třeba zahrnout odkaz na System.dll, který je odkazován automaticky.import Směrnice umožňuje používat typy bez jejich plně kvalifikované názvy stejným způsobem jako using směrnice v souboru normální program.
Například po importu System.IO, můžete napsat:
<# var properties = File.ReadLines("C:\\propertyList.txt");#>
...
<# foreach (string propertyName in properties) { #>
...
<# For Each propertyName As String In
File.ReadLines("C:\\propertyList.txt")
#>
Otevření souboru relativní cestu
Načíst soubor z umístění vzhledem k textu šablony, můžete použít this.Host.ResolvePath().Tuto funkci používat.Hostitele, je nutné nastavit hostspecific="true" v template:
<#@ template debug="false" hostspecific="true" language="C#" #>
Pak můžete napsat, například:
<# string fileName = this.Host.ResolvePath("filename.txt");
string [] properties = File.ReadLines(filename);
#>
...
<# foreach (string propertyName in properties { #>
...
<# Dim fileName = Me.Host.ResolvePath("propertyList.txt")
Dim properties = File.ReadLines(filename)
#>
...
<# For Each propertyName As String In properties
...
#>
Můžete také použít this.Host.TemplateFile, který určuje název souboru šablony.
The type of this.Host (in VB, Me.Host) is Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost.
Získávání dat zVisual Studio
Použití služby poskytované v Visual Studio, nastavte hostSpecific atribut a zatížení EnvDTE sestavení.Potom můžete IServiceProvider.GetCOMService() přístup k zařízení DTE a dalších služeb.Příklad:
<#@ template hostspecific="true" language="C#" #>
<#@ output extension=".txt" #>
<#@ assembly name="EnvDTE" #>
<#
IServiceProvider serviceProvider = (IServiceProvider)this.Host;
EnvDTE.DTE dte = (EnvDTE.DTE) serviceProvider.GetCOMService(typeof(EnvDTE.DTE));
#>
Number of projects in this VS solution: <#= dte.Solution.Projects.Count #>
Tip
Text šablony spuštěna ve vlastní doméně aplikace a služby k nim zařazování.V této situaci je spolehlivější než GetService() GetCOMService().
Obnovení automaticky kód
Obvykle několik souborů Visual Studio řešení jsou generovány s jedním vstupním modelem.Každý soubor je generován z vlastní šablonu, ale šablony, které přejímají stejný model.
Pokud se změní zdrojový model, měla znovu všechny šablony v řešení.Chcete-li to provést ručně, zvolte Transformovat všechny šablony na sestavení nabídky.
Pokud jste nainstalovali Visual Studio vizualizace a modelování SDK můžete mít všechny šablony, které jsou transformovány automaticky při každém provedení sestavení.Upravte soubor projektu (CSPROJ nebo VBPROJ) v textovém editoru a přidejte následující řádky poblíž konce souboru, po jiných <import> příkazy:
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v11.0\TextTemplating\Microsoft.TextTemplating.targets" />
<PropertyGroup>
<TransformOnBuild>true</TransformOnBuild>
<!-- Other properties can be inserted here -->
</PropertyGroup>
Další informace naleznete v tématu Generování kódu v procesu sestavení.
Hlášení chyb
Chyby a upozornění v Visual Studio chyba okna pomocí těchto metod:
Error("An error message");
Warning("A warning message");
Převod existujícího souboru šablony
Užitečné funkce šablon je, že vypadají velmi podobně jako soubory, které generují s některé vloženého programového kódu.To navrhne vhodný způsob vytvoření šablony.Nejprve vytvořit běžný soubor jako prototyp, jako Visual C# souboru a generování kódu, který mění výsledný soubor postupně zavést.
Existující soubor převést na šablonu návrhu
Do vašeho Visual Studio projektu, přidejte soubor typu, který chcete vygenerovat jako .cs, .vb, nebo .resx souboru.
Test nového souboru a ujistěte se, že funguje.
V Průzkumníku řešení změnit příponu názvu souboru na .tt.
Zkontrolujte následující vlastnosti .tt souboru:
Vlastní nástroj =
TextTemplatingFileGenerator
Akce sestavení =
Žádná
Začátek souboru vložte následující řádky:
<#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".cs" #>
Pokud chcete napsat generování kódu šablony v Visual Basic, nastavte language atribut "VB" namísto "C#".
Nastavit extension příponu typu souboru, který chcete vygenerovat například atribut .cs, .resx, nebo .xml.
Uložte soubor.
Pomocný soubor je vytvořen s určenou příponu.Jeho vlastnosti jsou správné pro typ souboru.Například Akce sestavení vlastnost .cs souboru by kompilace.
Ověřte, zda vygenerovaný soubor obsahuje stejný obsah jako původní soubor.
Identifikujte část souboru, který chcete měnit.Například součást, která se zobrazí pouze za určitých podmínek nebo části se opakuje, nebo tam, kde určité hodnoty lišit.Vložte generování kódu.Uložte soubor a ověřit, že pomocný soubor správně vygenerován.Tento krok opakujte.
Pokyny pro generování kódu
Viz Pokyny pro psaní textu šablony T4.
Další kroky
Další krok |
Téma |
---|---|
Psaní a ladění pokročilejší text šablony s kódem, který používá pomocné funkce zahrnuté soubory a trvalá data. |
|
Generování dokumentů ze šablony v době běhu. |
|
Spustit generování textu mimo Visual Studio. |
|
Transformace dat ve formuláři domény pro konkrétní jazyk. |
|
Zápis směrnice procesory zdrojů dat transformace. |