Vytvoření kódu v době návrhu pomocí textových šablon T4
Návrhu T4 text šablonám můžete ke generování programového kódu a další soubory ve vaší Visual Studio projektu.Obvykle budete psát šablony, které se tak, aby se liší kód, který generují podle data z modelu.Model je souboru nebo z databáze, která obsahuje základní informace o požadavky vaší aplikace.
Například může mít model, který definuje pracovní postup, buď jako tabulka nebo diagramu.Z modelu můžete vygenerovat software, který provede pracovního postupu.Pokud požadavky na vaši uživatelé změnit, je snadné diskutovat o nového pracovního postupu pro uživatele.Opětovného vytváření kódu z pracovního postupu je vyšší spolehlivost než aktualizace kódu ručně.
[!POZNÁMKA]
Objekt modelu je zdroj dat, která popisuje určitý aspekt aplikace.Může to být jakékoli podobě, v libovolném typu souboru nebo databázi.Nemá být jakoukoli formou konkrétní, jako je UML model nebo modelu domény konkrétní jazyk.Typické modely jsou ve formě tabulky nebo soubory XML.
Znáte pravděpodobně již generování kódu.Pokud definujete studijní materiály ve .resx souborů v vaše Visual Studio řešení, sada třídy a metody, je vygenerována automaticky.Soubor prostředků umožňuje jednodušší a vyšší spolehlivost, chcete-li upravit prostředky než by být, pokud bylo nutné upravit třídy a metody.Se šablonami text může generovat kód stejným způsobem jako ze zdroje vlastního návrhu.
Šablona text obsahuje směs text, který chcete generovat a programový kód, který generuje proměnné části textu.Programový kód a umožňuje opakovat nebo podmíněně vynechat části generovaného textu.Vygenerovaný text, které umožňují samotného být programový kód, který bude součástí vaší aplikace.
Vytvoření šablony návrhu T4 Text
Chcete-li vytvořit šablonu T4 návrhu v sadě Visual Studio
Vytvořit Visual Studio projektu nebo otevřete existující.
Například na soubor nabídce zvolte nový, projektu.
Přidejte textový soubor šablony do vašeho projektu a zadejte jeho název, který má .tt rozšíření.
Chcete-li to provést, v Průzkumníka řešení, v místní nabídce projektu, zvolte přidat, novou položku.V přidat novou položku dialogového okna vyberte textové šablony z podokna uprostřed.
Všimněte si, že nástroj pro vlastní 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 šablonu, kterou chcete Visual Basic projektu, bude atribut language "VB".
Přidejte nějaký text na konci souboru.Příklad:
Hello, world!
Uložte soubor.
Zobrazí se pravděpodobně upozornění zabezpečení zprávou, které vás vyzve k potvrzení, že chcete spustit šablony.Klikněte na tlačítko OK.
V Průzkumníka řešení, rozbalte uzel souboru šablony a zjistíte, soubor s příponou TXT.Tento soubor obsahuje text vygenerovaná z této šablony.
[!POZNÁMKA]
Pokud je váš projekt projektu Visual Basic, musíte klepnout zobrazit všechny soubory Chcete-li zobrazit výstupní soubor.
Opětovné generování kódu
Šablonu bude spuštěn, generování souboru pobočkách v žádné z následujících případech:
Upravit šablonu a poté změňte zaměření na jiný Visual Studio okna.
Uložte šablonu.
Klikněte na tlačítko transformace všechny šablony v sestavení nabídky.To bude transformace všechny šablony Visual Studio řešení.
V Průzkumníka řešení, v místní nabídce ze všech souborů, zvolte spustit nástroj pro vlastní.Tuto metodu můžete použijte k transformaci podmnožinu vybrané šablony.
Můžete také nastavit Visual Studio projekt tak, aby šablony, které jsou spouštěny, když datové soubory, které čtou se změnily.Další informace naleznete v tématu Automatické opětovné generování kódu.
Generování proměnné textu
Text šablonám můžete použít ke změně obsahu generovaného souboru programového kódu.
K vytvoření textu s použitím programového kódu
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 #>
Uložte soubor .tt a znovu zkontrolovat souboru generovaného txt.Zobrazí se seznam čtverce číslo od 0 do 10.
Všimněte si, že příkazy jsou uzavřeny v rámci <#...#>a jedním výrazy v rámci <#=...#>.Další informace naleznete v tématu Tvorba textové šablony T4.
Pokud píšete generování kódu Visual Basic, template by měl obsahovat direktivu language="VB"."C#"výchozím nastavením je.
Ladění šablonu návrhu T4 Text
Chcete-li ladit text šablony:
Vložit debug="true" do template direktivu.Příklad:
<#@ template debug="true" hostspecific="false" language="C#" #>
Nastavit zarážky v šabloně, stejným způsobem, který by se jednalo o pro běžné kód.
Zvolte ladění šablony T4 z místní nabídky textového souboru šablony v Průzkumníku řešení.
Šablona spustí a zastaví na zarážky.Můžete zkontrolovat proměnné a kód krokovat obvyklým způsobem.
Tip
debug="true"zašle generovaný kód mapování přesněji na šabloně text vložením číslování direktivy do generovaného kódu více řádků.Pokud pole ponecháte limit, může být zarážky zastavit spustit v chybném stavu.
Však může zůstat v klauzuli v direktivě šablony i v případě, že nejsou ladění.To způsobí, že pouze velmi malé poklesu výkonu.
Generování kódu nebo materiálů pro vaše řešení
Můžete generovat programových souborů, které se liší v závislosti na modelu.Model je vstup například databáze, konfigurační soubor, modelu UML, DSL modelu nebo jiného zdroje.Obvykle generovat několik souborů programu jsou ze stejného modelu.K dosažení tohoto vytvořte soubor šablony pro každý soubor generovaného program a přečetli všechny šablony stejný model.
Chcete-li generovat programového kódu nebo zdroje
Změňte direktivu výstupu vygenerovat soubor příslušného typu, například cs, VB, RESX nebo XML.
Vložte kód, který vygeneruje kód řešení, kterou budete potřebovat.Pokud například chcete generovat deklarace polí tři celé číslo v třídě:
<#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".cs" #> <# var properties = new string [] {"P1", "P2", "P3"}; #> // This is generated code: class MyGeneratedClass { <# // This code runs in the text template: foreach (string propertyName in properties) { #> // Generated code: 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 zkontrolovat vygenerovaný 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 vygenerovaný Text.
Při generování programový kód je nejdůležitější, chcete-li předejít uvedení generování kódu, který provede v šabloně a výsledný generovaného kódu, který se stane součástí vašeho řešení.Tyto dva jazyky nemusejí být stejné.
V předchozím příkladu má dvě verze.V jedné verzi je generování kódu v jazyce C#.V jiné verzi je generování kódu jazyka Visual Basic.Ale text vytvořený pomocí obou z nich je stejná, a je třída jazyka C#.
Stejným způsobem, můžete použít Visual C# šablony pro generování kódu v jakémkoli jazyce.Vygenerovaný text nemusí být v jakémkoli jazyce konkrétní a nemá být programový kód.
Vytvoření struktury text šablony
Jako věci osvědčených postupů můžeme jsou obvykle oddělení kódu šablony do dvou částí:
Konfigurace nebo část shromažďování dat, která nastavuje hodnoty proměnných, ale neobsahuje bloky textu.V předchozím příkladu tuto část je inicializace properties.
To se někdy nazývá oddíl "model", protože vytvoří model v úložišti a obvykle přečte soubor modelu.
Část textu generování (foreach(...){...} v příkladu), který používá hodnoty proměnné.
Toto není nezbytné oddělení, ale je styl, díky čemuž je snazší číst šablonu snížením složitost na straně, který obsahuje text.
Čtení souborů nebo jiných zdrojů
Pro přístup k souboru modelu nebo databázi, můžete použít šablonu kódu sestavení, jako je například System.XML.Chcete-li získat přístup k těmto sestavením, je nutné vložit direktivy, jako jsou tyto:
<#@ assembly name="System.Xml.dll" #>
<#@ import namespace="System.Xml" #>
<#@ import namespace="System.IO" #>
assembly Direktivu zpřístupní zadané sestavení do vašeho kódu šablony stejným způsobem jako části odkazy Visual Studio projektu.Chcete-li zahrnout odkaz na System.dll, který je odkazován automaticky nepotřebujete.import Umožňuje používat typy bez použití jejich plně kvalifikované názvy stejným způsobem jako using direktivu v souboru normální program.
Například po provedení 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řít soubor s relativní cesta
Chcete-li načíst soubor z umístění vzhledem k šabloně text, můžete použít this.Host.ResolvePath().Chcete-li tuto možnost použijte.Hostitel, je nutné nastavit hostspecific="true" v template:
<#@ template debug="false" hostspecific="true" language="C#" #>
Poté 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á identifikuje název aktuální soubor šablony.
Typ this.Host (v jazyce Visual Basic, Me.Host) je Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost.
Získávání dat zVisual Studio
Použití služeb, které jsou k dispozici ve Visual Studio, nastavte hostSpecific atribut a zatížení EnvDTE sestavení.Poté můžete IServiceProvider.GetCOMService() získat přístup k 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ény aplikace a služby přistupují zařazování.V takovém případě je vyšší spolehlivost než GetService() GetCOMService().
Automaticky opětovného vytváření kódu
Obvykle několik souborů v Visual Studio řešení, které jsou generovány s jeden vstupní model.Každý soubor je generován z vlastní šablonu, ale šablony, které všechny odkazovat na stejný model.
Pokud změny modelu zdroje, měli byste znovu spustit všechny šablony v řešení.Chcete-li to provést ručně, zvolte transformace všechny šablony na sestavení nabídky.
Pokud jste si nainstalovali Visual Studio vizualizaci a modelování SDK, může mít všechny šablony transformaci automaticky při každém provedení sestavení.Chcete-li to provést, upravte souboru projektu (CSPROJ nebo VBPROJ) v textovém editoru a přidejte následující řádky téměř na konci souboru, za jakékoli jiné <import> příkazů:
<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 Vytvoření kódu v procesu sestavení.
Zpráv o chybách
K umístění chyby a upozornění v Visual Studio chyb okně tyto metody lze použít:
Error("An error message");
Warning("A warning message");
Převod existujícího souboru na šablonu
Užitečné funkce šablon je, že vypadají velmi podobný soubory, které generují společně s některé vloženého programového kódu.To naznačuje užitečné metoda vytváření šablony.Nejprve vytvořit soubor běžných jako prototyp, jako je například Visual C# souboru a pak postupně zavádět generování kódu, který se liší výsledný soubor.
Chcete-li převést existující soubor do šablony návrhu
Na váš Visual Studio projektu, přidejte soubor typu, který chcete generovat, jako je například .cs, .vb, nebo .resx souboru.
Test nový soubor, abyste měli jistotu, že funguje.
V Průzkumníku řešení změnit příponu názvu souboru do .tt.
Ověřte následující vlastnosti .tt souboru:
Vlastní nástroj =
TextTemplatingFileGenerator
Akce sestavení =
Žádná
Na začátek souboru vložte následující řádky:
<#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".cs" #>
Pokud budete chtít zapsat generování kódu šablony v Visual Basic, nastavte language atribut "VB" namísto "C#".
Nastavte extension atribut příponu názvu souboru pro typ souboru, který chcete generovat, například .cs, .resx, nebo .xml.
Uložte soubor.
Pomocný soubor je vytvořena, se zadanou příponou.Typ souboru správné její vlastnosti.Můžete například proces sestavení by být vlastnost soubor cs zkompilovat.
Ověřte, zda generovaného souboru obsahuje týž obsah jako původní soubor.
Identifikujte část souboru, který chcete měnit.Můžete například součást, která se zobrazí pouze v rámci určitých podmínek nebo součástí, které se opakují nebo tam, kde konkrétní hodnoty lišit.Vložte generování kódu.Uložte soubor a ověřte, že pobočkách soubor je správně vytvořen.Tento krok opakujte.
Pokyny pro generování kódu
Naleznete v Pokyny pro tvorbu textových šablon T4.
Další kroky
Další krok |
Téma |
---|---|
Zápis a ladění pokročilejší šablona textu se kód, který používá pomocných funkcí, zahrnuté soubory a externí data. |
|
Generovat dokumenty ze šablon za běhu. |
|
Spuštění generování textu mimo Visual Studio. |
|
Transformujte data ve formě jazyka specifické pro doménu. |
|
Napište direktivy procesory k transformaci zdroje dat.. |