Zapisywanie szablonu tekst T4
Szablon tekst zawiera tekst, który zostanie wygenerowany z niego.Na przykład szablon, który tworzy stronę sieci web będzie zawierać "<html> …" i wszystkie inne standardowe części strony HTML.Dodaje do szablonu są bloków sterowania, które są fragmenty kodu programu.Bloki kontrolne podać wartości zmiennych i pozwolić części tekstu warunkowego i powtarzających się.
Struktura ta ułatwia szablonu do rozwijania, ponieważ zaczynają prototyp wygenerowany plik i wstawić przyrostowo bloki kontrolne, które różnią się wynik.
Szablony tekst składają się z następujących części:
Dyrektyw -elementów, które kontrolują sposób przetwarzania szablonu.
Bloki tekstowe - zawartości, która jest kopiowana bezpośrednio do wyjścia.
Bloki kontroli -program kod, który wstawia wartości zmiennych w tekście i kontroluje warunkowych lub powtarzających się części tekstu.
Aby spróbować przykłady w tym temacie, skopiuj je do pliku szablonu opisane w Generowanie kodu czasu projektowania przy użyciu szablonów tekst T4.Po zakończeniu edycji pliku szablonu, zapisz go, a następnie sprawdzać dane wyjściowe .txt pliku.
Dyrektyw
Tekst szablonu dyrektywy stanowią ogólne instrukcje, aby mechanizm dynamicznego tekstu o sposobach generowania kodu transformacji i pliku wyjściowego.
Na przykład następujące dyrektywy określa, że plik wyjściowy powinien mieć rozszerzenie txt:
<#@ output extension=".txt" #>
Aby uzyskać więcej informacji na temat dyrektyw, zobacz T4 Tekst szablonu dyrektyw.
Bloki tekstu
Blok tekstu wstawia tekst bezpośrednio do pliku wyjściowego.Nie istnieje żadne specjalne formatowanie dla bloków tekstu.Na przykład następujący szablon tekst wygeneruje plik tekstowy, który zawiera słowo "Hello":
<#@ output extension=".txt" #>
Hello
Bloki kontrolne
Bloki kontrolne są sekcje kodu programu, które są używane do przekształcania szablony.Jest domyślny język C# do wykorzystania, ale Visual Basic, można napisać niniejszej dyrektywy na początku pliku:
<#@ template language="VB" #>
Język, w którym pisania kodu w blokach formant nie ma wpływu na język tekstu, który jest generowany.
Bloki kontrolne standardowy
Blok sterowania standardowych jest sekcja kodu programu, który generuje część pliku wyjściowego.
Możesz łączyć dowolną liczbę bloków tekstu i bloki kontrolne standardowych w pliku szablonu.Jednakże nie można umieścić jeden blok sterowania innej.Każdy blok sterowania standardowych jest ograniczony przez symbole <# ... #>.
Na przykład, następujący blok sterowania i blok tekstu spowodować pliku wyjściowego do zawierać wiersz "0, 1, 2, 3, 4 Hello!":
<#
for(int i = 0; i < 4; i++)
{
Write(i + ", ");
}
Write("4");
#> Hello!
Zamiast jawnego Write() sprawozdań może interleave tekstu i kodu.Poniższy przykład drukuje "Hello!" cztery razy:
<#
for(int i = 0; i < 4; i++)
{
#>
Hello!
<#
}
#>
Tekst można wstawiać zablokować wszędzie tam, gdzie Write(); instrukcji byłyby dozwolone w kodzie.
[!UWAGA]
Podczas osadzania bloku tekstu w obrębie złożone wyrażenie, takie jak pętli lub warunkowe, należy zawsze używać nawiasów sześciennych {...} dla bloku tekstu.
Bloki kontrolne wyrażenie
Blok sterowania wyrażenie oblicza wyrażenie i konwertuje go na ciąg.To jest wstawiany do pliku wyjściowego.
Bloki kontrolne wyrażenia są rozdzielane przez symbole<#= ... #>
Na przykład następujący blok sterowania powoduje, że plik wyjściowy "5" zawiera:
<#= 2 + 3 #>
Ogłoszenia, że symbol otwarcia ma trzy znaki "< # =".
Wyrażenie może zawierać żadnych zmiennej, która jest w zasięgu.Na przykład ten blok drukuje wiersze numerami:
<#@ output extension=".txt" #>
<#
for(int i = 0; i < 4; i++)
{
#>
This is hello number <#= i+1 #>: Hello!
<#
}
#>
Bloki kontrolne funkcja klasy
Blok sterowania funkcją klasa definiuje właściwości, metody lub innego kodu, które nie powinny być włączone w głównym transformacji.Klasa funkcja bloki są często używane funkcje pomocnika.Zwykle klasy funkcji bloki są umieszczane w oddzielnych plikach, dzięki czemu można je uwzględnione przez więcej niż jeden szablon tekstu.
Bloki kontrolne funkcja klasy są rozdzielane przez symbole<#+ ... #>
Na przykład następujący plik szablonu deklaruje i używa metody:
<#@ 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;
}
#>
Funkcje klasy muszą być umieszczone na końcu pliku, w którym są zapisywane.Można jednak <#@include#> pliku, który zawiera klasy, nawet jeśli include dyrektywy następuje bloków standardowych i tekst.
Aby uzyskać więcej informacji na temat bloków sterowania, zobacz Bloki kontrolne szablonu tekstu.
Bloki funkcja klasy może zawierać bloki tekstu
Można napisać metodę, która generuje tekstu.Na przykład:
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 #>.
<#
}
#>
Jest to szczególnie przydatne umieścić metoda, która generuje tekstu w oddzielnym pliku, który może zawierać więcej niż jeden szablon.
Za pomocą zewnętrznych definicje
Zespoły
Bloki kodu szablonu można używać typów, które są zdefiniowane do często używanych.NET zespołów, takich jak plik System.dll.Ponadto można odwoływać się wzajemnie.Zespoły netto lub własne zestawy.Można podać nazwy ścieżki lub silnej nazwy zestawu:
<#@ assembly name="System.Xml" #>
Należy użyć nazwy ścieżki bezwzględnej, lub użyj nazwy standardowych makr w nazwie ścieżki.Na przykład:
<#@ assembly name="$(SolutionDir)library\MyAssembly.dll" #>
Na liście makr, zobacz Makra dla poleceń kompilacji i właściwości.
Dyrektywy Zgromadzenie nie ma wpływu w preprocessed tekst szablonu.
Aby uzyskać więcej informacji, zobacz T4 Dyrektywy zestawu.
Przestrzenie nazw
Dyrektywy przywóz jest taki sam, jak using klauzuli w C# lub imports klauzuli w języku Visual Basic.Umożliwia on odnoszą się do typów w kodzie bez korzystania z w pełni kwalifikowana nazwa:
<#@ import namespace="System.Xml" #>
Można użyć jako wiele assembly i import dyrektyw, jak chcesz.Trzeba je umieścić przed bloki tekstu i kontroli.
Aby uzyskać więcej informacji, zobacz T4 Dyrektywę Import.
Łącznie z kodem i tekst
include Dyrektywy wstawia tekst z innego pliku szablonu.Na przykład niniejszej dyrektywy Wstawia zawartość test.txt.
<#@ include file="c:\test.txt" #>
Dołączona zawartość jest przetwarzany w prawie tak, jakby był częścią szablonu tym tekstem.Jednakże można dołączyć plik, który zawiera blok funkcja klasy <#+...#> , nawet jeśli dyrektywy dołączania następuje zwykły tekst i bloki kontrolne standardowych.
Aby uzyskać więcej informacji, zobacz T4 Dyrektywy dołączania.
Metody narzędziowe
Istnieje kilka metod takich jak Write() są zawsze dostępne w bloku sterowania.Obejmują one metody pomagające wcięcie danych wyjściowych i zgłaszania błędów.
Można także napisać własny zestaw metody narzędziowe.
Aby uzyskać więcej informacji, zobacz Metody narzędziowe szablonu tekstu.
Przekształcanie danych i modeli
Jest najbardziej użyteczna aplikacja szablonu tekst do wygenerowania materiału na podstawie zawartości źródła, takie jak model, bazy danych lub pliku danych.Szablon wyodrębnia i formatowane w danych.Kolekcja szablonów można przekształcić takie źródło do wielu plików.
Istnieją różne podejścia do odczytu z pliku źródłowego.
Odczytywanie pliku szablonu tekst.Jest to najprostszy sposób, aby pobrać dane do szablonu:
<#@ import namespace="System.IO" #>
<# string fileContent = File.ReadAllText(@"C:\myData.txt"); ...
Załadowanie pliku jako model żeglownych.Bardziej wydajne metodą jest odczyt danych jako model, który tekst kodu szablonu można nawigować.Na przykład można załadować pliku XML i nawigować go przy użyciu wyrażeń XPath.Można także użyć xsd.exe utworzyć zestaw klas, które można odczytać danych XML.
**Edytuj plik modelu w formie lub diagramu.**Narzędzia języka specyficznego dla domeny zawiera narzędzia, które umożliwiają edytowanie modelu diagramu lub formularz Windows.Ta funkcja ułatwia omówienia modelu z użytkownikami generowanych aplikacji.Narzędzia języka specyficznego dla domenytworzy również zestaw klas wymagająca, które odzwierciedlają strukturę modelu.Aby uzyskać więcej informacji, zobacz Generowanie kodu w języku specyficzne dla domeny.
Korzystanie z modelu UML.Można wygenerować kodu z modelu UML.Ma tę zaletę, że model może być edytowany jako wykres w znanych notacji.Nie trzeba także projektowania na diagramie.Aby uzyskać więcej informacji, zobacz Jak: generowanie plików z modelu UML.
Ścieżki względne plików
Aby odwołać pliku w lokalizacji względem szablonu tekstu, użyć this.Host.ResolvePath().Należy także ustawić hostspecific="true" w template dyrektywę:
<#@ 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 #>
Można również uzyskać inne usługi, które są dostarczane przez hosta.Aby uzyskać więcej informacji, zobacz Accessing Visual Studio or other Hosts from a Template.
Szablony tekst Uruchom w oddzielnym AppDomain
Należy pamiętać, że szablon tekst jest uruchamiany w elementu AppDomain, oddzielonym od głównej aplikacji.W większości przypadków nie jest to ważne, ale może spowodować w niektórych przypadkach złożonych.Na przykład jeśli chcesz przekazywania danych do lub z szablonu z osobna usługa usługi przekazuje można serializować interfejsu API.
Edytowanie szablonów
Wyspecjalizowane edytorach szablonu można pobrać z galerii Online Menedżera rozszerzeń.Na Narzędzia menu, kliknij Extension Manager.Kliknij Online Gallery, a następnie użyć narzędzia wyszukiwania.
Tematy pokrewne
Zadania |
Temat |
---|---|
Zapisywanie szablonu. |
|
Generowanie tekstu za pomocą kodu programu. |
|
Generowanie plików w Visual Studio roztworu. |
Generowanie kodu czasu projektowania przy użyciu szablonów tekst T4 |
Uruchom generowanie tekstu poza Visual Studio. |
|
Przekształcić dane w postaci języka specyficzne dla domeny. |
|
Napisz dyrektywa procesorów do przekształcania źródeł danych. |