Generování textu za běhu pomocí textových šablon T4
Textové řetězce můžete generovat aplikace za běhu pomocí Visual Studio runtime text šablony.Není nutné mít v počítači, kde aplikace provede Visual Studio.Runtime šablony jsou někdy "předzpracovány text šablony" nazývá, protože v době kompilace, generuje šablona kódu za běhu.
Každá šablona je směs text se zobrazí v generovaných řetězce a fragmenty kódu programu.Program fragmenty hodnoty pro proměnné části řetězce a také řídit podmíněný a opakované části.
Například následující šablonu nelze použít v aplikaci, která vytvoří zprávu ve formátu HTML.
<#@ template language="C#" #>
<html><body>
<h1>Sales for Previous Month</h2>
<table>
<# for (int i = 1; i <= 10; i++)
{ #>
<tr><td>Test name <#= i #> </td>
<td>Test value <#= i * i #> </td> </tr>
<# } #>
</table>
This report is Company Confidential.
</body></html>
Všimněte si, že je šablona stránky HTML, ve kterém byly částí proměnné nahrazeny kód programu.Návrh taková stránka by mohla začít zápisem prototyp statické stránky HTML.Je nelze nahradit tabulky a jiné proměnné části programový kód, který generuje obsah, který se liší od jednou na další.
Umožňuje vaší aplikaci pomocí šablony je jednodušší než ve například dlouhé řady příkazů zápisu naleznete ve formuláři konečného výstupu.Změny formuláře výstup je jednodušší a spolehlivější.
Vytvoření šablony spuštění Text v libovolné aplikaci
Vytvoření šablony pro spuštění text
V aplikaci Solution Explorer v místní nabídce projektu, zvolte Přidat, Nové položky.
V Přidat novou položku vyberte položku Text šablony Runtime.(V Visual Basic oblast pod Společné Items\General.)
Zadejte název souboru šablony.
[!POZNÁMKA]
Název souboru šablony bude použit jako název třídy do generovaného kódu.Proto nesmí obsahovat mezery nebo interpunkci.
Zvolte Přidat.
Je vytvořen nový soubor s příponou .tt.Jeho Vlastní nástroj vlastnost TextTemplatingFilePreprocessor.Obsahuje následující řádky:
<#@ template language="C#" #> <#@ assembly name="System.Core" #> <#@ import namespace="System.Linq" #> <#@ import namespace="System.Text" #> <#@ import namespace="System.Collections.Generic" #>
Převod existujícího souboru šablony spuštění
Vhodný způsob vytvoření šablony je převést existující příklad výstupu.Například pokud vaše aplikace bude generovat soubory HTML, můžete spustit vytvořením prostého souboru HTML.Zkontrolujte, zda funguje správně a správnost jeho vzhled.Zahrnout ji do své Visual Studio projektu a převést na šablonu.
Existující textový soubor převést na šablonu spuštění
Zahrnout soubor do vaší Visual Studio projektu.V aplikaci Solution Explorer v místní nabídce projektu, zvolte Přidat, Existující položku.
Nastavení v souboru Vlastní nástroje vlastnost TextTemplatingFilePreprocessor.V aplikaci Solution Explorer v místní nabídce souboru, zvolte Vlastnosti.
[!POZNÁMKA]
Pokud je již nastavena, ujistěte se, že je TextTemplatingFilePreprocessor a TextTemplatingFileGenerator.Tato situace může nastat, pokud soubor s příponou .tt.
Změňte příponu souboru na .tt.Přestože tento krok je volitelný, pomáhá předejít otevřením souboru v nesprávné editor.
Odeberte z hlavní části název souboru mezery nebo interpunkci.Například by bylo nesprávné "Můj Web Page.tt", ale "MyWebPage.tt" je správný.Název souboru bude použit jako název třídy do generovaného kódu.
Začátek souboru vložte následující řádek.Pracujete-li v projektu aplikace Visual Basic, nahraďte "C#" s "VB".
<#@ template language="C#" #>
Obsah šablony pro spuštění
Směrnice šablony
Zachovat první řádek šablony, které bylo při vytvoření souboru:
<#@ template language="C#" #>
Parametr jazyka bude záviset na jazyk projektu.
Obyčejný obsahu
Upravit .tt soubor obsahovat text, který chcete generovat aplikace.Příklad:
<html><body>
<h1>Sales for January</h2>
<!-- table to be inserted here -->
This report is Company Confidential.
</body></html>
Vloženého programového kódu
Můžete vložit kód programu mezi <# a #>.Příklad:
<table>
<# for (int i = 1; i <= 10; i++)
{ #>
<tr><td>Test name <#= i #> </td>
<td>Test value <#= i * i #> </td> </tr>
<# } #>
</table>
<table>
<#
For i As Integer = 1 To 10
#>
<tr><td>Test name <#= i #> </td>
<td>Test value <#= i*i #> </td></tr>
<#
Next
#>
</table>
Všimněte si, že příkazy jsou vloženy mezi <# ... #> a výrazy jsou vloženy mezi <#= ... #>.Další informace naleznete v tématu Tvorba textové šablony T4.
Pomocí šablony
Kód šablony
Při každém uložení .tt soubor dceřinou společností .cs nebo .vb bude vytvořen soubor.Chcete-li tento soubor v aplikaci Solution Explorer, rozbalte .tt uzel souboru.V projektu aplikace Visual Basic, nebude po klepnutí na tlačítko rozbalte uzel Zobrazit všechny soubory v aplikaci Solution Explorer nástrojů.
Sdělení, že pomocný soubor obsahuje dílčí třídy, která obsahuje metodu s názvem TransformText().Tuto metodu lze volat z aplikace.
Generování textu v době spuštění
Kód aplikace můžete vygenerovat obsah šablony pomocí volání takto:
MyWebPage page = new MyWebPage();
String pageContent = page.TransformText();
System.IO.File.WriteAllText("outputPage.html", pageContent);
Dim page = New My.Templates.MyWebPage
Dim pageContent = page.TransformText()
System.IO.File.WriteAllText("outputPage.html", pageContent)
Chcete-li umístit určitý obor názvů vygenerované třídy, nastavte Vlastní nástroj pro obor názvů vlastnost text soubor šablony.
Ladění Runtime Text šablony
Ladění a testování šablon runtime text stejným způsobem jako běžné kód.
V textu šablony lze nastavit zarážku.Spustit aplikaci v režimu ladění z aplikace Visual Studio, můžete kód krokovat a vyhodnocování výrazů obvyklým způsobem.
Předávání parametrů do konstruktoru
Šablona obvykle musíte importovat data z jiných částí aplikace.Chcete-li to snadné, kódu vytvořeného pomocí šablony je částečné třídy.V projektu můžete vytvořit jinou část stejné třídy v jiném souboru.Tento soubor může obsahovat konstruktor s parametry, vlastnosti a funkce, které lze získat přístup i kód, který je vložen v šabloně a ostatní aplikace.
Můžete například vytvořit samostatný soubor MyWebPageCode.cs:
partial class MyWebPage
{
private MyData m_data;
public MyWebPage(MyData data) { this.m_data = data; }}
V souboru šablony MyWebPage.tt, nelze zapisovat:
<h2>Sales figures</h2>
<table>
<# foreach (MyDataItem item in m_data.Items)
// m_data is declared in MyWebPageCode.cs
{ #>
<tr><td> <#= item.Name #> </td>
<td> <#= item.Value #> </td></tr>
<# } // end of foreach
#>
</table>
Použití této šablony v aplikaci:
MyData data = ...;
MyWebPage page = new MyWebPage(data);
String pageContent = page.TransformText();
System.IO.File.WriteAllText("outputPage.html", pageContent);
Parametry konstruktoru jazyka Visual Basic
V Visual Basic, samostatný soubor MyWebPageCode.vb obsahuje:
Namespace My.Templates
Partial Public Class MyWebPage
Private m_data As MyData
Public Sub New(ByVal data As MyData)
m_data = data
End Sub
End Class
End Namespace
Soubor šablony může obsahovat:
<#@ template language="VB" #>
<html><body>
<h1>Sales for January</h2>
<table>
<#
For Each item In m_data.Items
#>
<tr><td>Test name <#= item.Name #> </td>
<td>Test value <#= item.Value #> </td></tr>
<#
Next
#>
</table>
This report is Company Confidential.
</body></html>
A předáním parametr do konstruktoru by vyvolat šablony:
Dim data = New My.Templates.MyData
' Add data values here ....
Dim page = New My.Templates.MyWebPage(data)
Dim pageContent = page.TransformText()
System.IO.File.WriteAllText("outputPage.html", pageContent)
Předávání dat ve vlastnosti šablony
Alternativní způsob předávání dat do šablony je přidat do šablony třídy v definici třídy částečné veřejné vlastnosti.Aplikaci můžete nastavit vlastnosti před vyvoláním TransformText().
Můžete také přidat pole do šablony v částečnou definici třídy.To by umožnilo předání dat mezi následných spuštěních nástroje šablony.
Použít částečné třídy pro kód
Mnoho vývojářů, raději se vyhnout psaní kódu velké subjekty v šablonách.Místo toho v částečné třídy, která má stejný název jako soubor šablony definujte metody.Tyto metody volejte ze šablony.Tímto způsobem šablony zobrazuje zřetelněji jaké cílové výstupní řetězec bude vypadat.Diskuse o vzhledu výsledek může být odděleno od logiky zobrazuje data vytvoření.
Sestavení a odkazy
Pokud chcete, aby váš kód šablony odkazovat.NET nebo jiných shromáždění jako System.Xml.dll, měli byste přidat do projektu odkazy obvyklým způsobem.
Pokud chcete importovat jmenný prostor stejným způsobem jako using prohlášení, můžete provést s import směrnice:
<#@ import namespace="System.Xml" #>
Tyto směrnice musí být umístěna na začátku souboru, bezprostředně po <#@template směrnice.
Sdílený obsah
Pokud je text, který je sdílený mezi několik šablon, můžete umístit do samostatného souboru a zahrnout do každého souboru, ve kterém by se:
<#@include file="CommonHeader.txt" #>
Zahrnutý obsah může obsahovat jakékoli směsi kód programu a prostý text a může obsahovat jiné směrnic a jiných směrnic.
Směrnice zahrnout lze použít kdekoli v textu souboru šablony nebo souboru.
Dědičnost mezi spuštění Text šablony
Můžete sdílet obsah mezi spuštění šablony pomocí zápisu šablony základní třídy, které mohou být abstraktní.Použití inherits parametr <@#template#> směrnice odkazuje na jiné runtime šablonu třídy.
Dědičnost vzorek: fragmenty Base metod
U vzorku v následujícím příkladu si následující body:
Základní třída SharedFragments definuje metody uvnitř bloků funkce třídy <#+ ... #>.
Základní třída neobsahuje žádný volný text.Místo toho všechny textové bloky dojít uvnitř funkce metody třídy.
Odvozené třídy vyvolá metody definované v SharedFragments.
Volání aplikace TextTransform() metoda odvozené třídy, ale netransformuje základní třídy SharedFragments.
Základní a odvozené třídy jsou runtime text šablony:, Vlastní nástroj vlastnost TextTemplatingFilePreprocessor.
SharedFragments.tt:
<#@ template language="C#" #>
<#+
protected void SharedText(int n)
{
#>
Shared Text <#= n #>
<#+
}
// Insert more methods here if required.
#>
MyTextTemplate1.tt:
<#@ template language="C#" inherits="SharedFragments" #>
begin 1
<# SharedText(2); #>
end 1
MyProgram.cs:
...
MyTextTemplate1 t1 = new MyTextTemplate1();
string result = t1.TransformText();
Console.WriteLine(result);
Výsledný výstup:
begin 1
Shared Text 2
end 1
Vzorek dědičnosti: Základní textu
V této alternativní přístup k použití dědičnosti šablony hromadné textu je definována v základní šablonu.Odvozené šablony poskytují data a text fragmenty, které se vejdou do základní obsah.
AbstractBaseTemplate1.tt:
<#@ template language="C#" #>
Here is the description for this derived template:
<#= this.Description #>
Here is the fragment specific to this derived template:
<#
this.PushIndent(" ");
SpecificFragment(42);
this.PopIndent();
#>
End of common template.
<#+
// State set by derived class before calling TextTransform:
protected string Description = "";
// 'abstract' method to be defined in derived classes:
protected virtual void SpecificFragment(int n) { }
#>
DerivedTemplate1.tt:
<#@ template language="C#" inherits="AbstractBaseTemplate1" #>
<#
// Set the base template properties:
base.Description = "Description for this derived class";
// Run the base template:
base.TransformText();
#>
End material for DerivedTemplate1.
<#+
// Provide a fragment specific to this derived template:
protected override void SpecificFragment(int n)
{
#>
Specific to DerivedTemplate1 : <#= n #>
<#+
}
#>
Kód aplikace:
...
DerivedTemplate1 t1 = new DerivedTemplate1();
string result = t1.TransformText();
Console.WriteLine(result);
Výsledný výstup:
Here is the description for this derived template:
Description for this derived class
Here is the fragment specific to this derived template:
Specific to DerivedTemplate1 : 42
End of common template.
End material for DerivedTemplate1.
Příbuzná témata
Šablony návrhu čas: Pokud chcete použít šablony pro generování kódu, bude část aplikace, viz Vytvoření kódu v době návrhu pomocí textových šablon T4.
Runtime šablony lze použít v libovolné aplikaci kde šablon a jejich obsah jsou určeny v čase kompilace.Ale pokud chcete zapsat Visual Studio rozšíření, které generuje text ze šablony, které změnit za běhu, viz Volání transformací textu v rozšíření VS.
Viz také
Koncepty
Vytvoření kódu a textové šablony T4