Generowanie kodu czasu projektowania przy użyciu szablonów tekstowych T4
Podczas projektowania T4 tekstu szablony pozwolą Ci do generowania kodu programu i inne pliki w swojej Visual Studio projektu.Zazwyczaj szablony zapisu, aby różnią kodu, które generują zgodnie z danych z modelu.Model jest pliku lub bazy danych zawierającej podstawowych informacji o wymagania dotyczące aplikacji.
Na przykład można mieć definiujący przepływ pracy, albo w postaci tabeli lub diagramu modelu.Z modelu można wygenerować oprogramowania, która wykonuje przepływu pracy.Zmień wymagania użytkowników, jest łatwy do omówienia nowy przepływ pracy z użytkownikami.Ponownego generowania kodu z przepływu pracy są bardziej niezawodne niż ręcznie aktualizowanie kodu.
[!UWAGA]
Element modelu jest źródłem danych opisujący określonego aspektów aplikacji.Może to być jakiejkolwiek formie dowolnego rodzaju pliku lub bazy danych.Nie ma być w jakiejkolwiek formie określonej, takie jak modelu UML lub model języka specyficznego dla domeny.Typowe modele są w formie tabel lub pliki XML.
Prawdopodobnie już znasz generowania kodu.Po zdefiniowaniu zasobów w .resx pliku w swojej Visual Studio rozwiązania, zestaw klas i metod są generowane automatycznie.Plik zasobów sprawia, że łatwiej i niezawodny, aby edytować zasoby nie będzie wymagała Edycja klas i metod.Szablony tekst może wygenerować kod w taki sam sposób, ze źródła własnego projektu.
Szablon tekst zawiera tekst, który ma zostać wygenerowany i kodu program, który generuje zmiennej fragmenty tekstu.Kod programu i umożliwia Powtórz lub warunkowe pominięcie części wygenerowanego tekstu.Wygenerowany tekst może się być kodu programu, która będzie częścią aplikacji.
Tworzenie szablonu tekstu T4 czasu projektowania
Aby utworzyć szablon T4 czasu projektowania w programie Visual Studio
Utwórz Visual Studio projektu lub Otwórz istniejący.
Na przykład na pliku menu, wybierz polecenie nowy, projektu.
Dodaj szablon pliku tekstowego z projektem i nadaj jej nazwę, która ma .tt rozszerzenia.
W tym celu w Eksploratora rozwiązań, w menu skrótów projektu, wybierz polecenie Dodaj, nowy element.W Dodaj nowy element okno dialogowe Wybierz szablonu tekstowego w środkowym okienku.
Należy zauważyć, że niestandardowego narzędzia właściwość pliku jest TextTemplatingFileGenerator.
Otwórz plik.Będzie ono już zawierać następujących dyrektyw:
<#@ template hostspecific="false" language="C#" #> <#@ output extension=".txt" #>
Jeśli został dodany do szablonu Visual Basic projektu, będzie atrybut language "VB".
Dodaj dowolny tekst na końcu pliku.Na przykład:
Hello, world!
Zapisz plik.
Może zostać wyświetlony ostrzeżenie o zabezpieczeniach okno komunikatu, z prośbą o potwierdzenie, że ma zostać uruchomiony w szablonie.Kliknij przycisk OK.
W Eksploratora rozwiązań, rozwiń węzeł pliku szablonu i można znaleźć pliku, który ma rozszerzenie .txt.Plik zawiera tekst wygenerowana na podstawie szablonu.
[!UWAGA]
Jeśli projekt projektu Visual Basic, należy kliknąć przycisk Pokaż wszystkie pliki w celu można znaleźć w pliku danych wyjściowych.
Ponownego generowania kodu
Szablon zostanie wykonany, generowanie pliku pomocniczego któregokolwiek z następujących przypadkach:
Edytuj szablon, a następnie zmień fokus z innym Visual Studio okna.
Zapisz szablon.
Kliknij przycisk Transform wszystkie szablony w tworzenie menu.To spowoduje przekształcenie wszystkie szablony w Visual Studio rozwiązania.
W Eksploratora rozwiązań, w menu skrótów ze wszystkich plików, wybierz uruchomić narzędzie niestandardowe.Ta metoda służy do przekształcenia podzbiór wybranych szablonów.
Można również skonfigurować Visual Studio projektu, tak aby szablony są wykonywane, gdy ich odczytać pliki danych zostały zmienione.Aby uzyskać więcej informacji, zobacz ponownego generowania kodu automatycznie.
Generowanie zmiennej tekstu
Tekst szablony pozwolą Ci się różnić w wygenerowanym pliku zawartości przy użyciu kodu programu.
Do generowania tekstu przy użyciu kodu programu
Zmień zawartość .tt pliku:
<#@ 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 #>
Zapisz plik .tt, a następnie ponownie sprawdzić plik .txt wygenerowany.Wyświetla listę kwadratów liczby z zakresu od 0 do 10.
Należy zauważyć, że instrukcje są ujęte w ramach <#...#>i jednego wyrażenia w ramach <#=...#>.Aby uzyskać więcej informacji, zobacz Pisanie szablonu tekstowego T4.
Po napisaniu generowania kodu Visual Basic, template dyrektywy powinien zawierać language="VB"."C#"jest to domyślne ustawienie.
Debugowanie szablon tekstu T4 czasu projektowania
Aby debugować szablon tekst:
Wstaw debug="true" do template dyrektywy.Na przykład:
<#@ template debug="true" hostspecific="false" language="C#" #>
Ustawianie punktów przerwania w szablonie, w taki sam sposób, jak w przypadku normalnych kodu.
Wybierz debugowanie szablonu T4 z menu skrótów pliku szablonu tekstu w Eksploratorze rozwiązań.
Szablon uruchomisz i zatrzymanie przy punktów przerwania.Możesz sprawdzić zmienne i śledzić wykonywania kodu w zwykły sposób.
Porada |
---|
debug="true"powoduje, że wygenerowany kod mapowania dokładniej do szablonu tekstu, wstawiając numerowanie dyrektywy do wygenerowanego kodu więcej wierszy.Pozostawienie go przerwania może zatrzymać Uruchom w niewłaściwym stanie. Ale nawet wtedy, gdy nie debugowania, można pozostawić klauzuli w dyrektywie szablonu.Powoduje to bardzo mały spadek wydajności. |
Generowanie kodu lub zasobów dla rozwiązania
Można generować pliki programów, które różnią się w zależności od modelu.Model jest dane wejściowe, takie jak bazy danych, pliku konfiguracji, modelu UML, DSL model lub innego źródła.Zazwyczaj wygenerowaniu kilka plików programu pochodzą z tego samego modelu.Można to osiągnąć, Utwórz plik szablonu dla każdego pliku wygenerowanego programu, a wszystkie szablony odczyt tego samego modelu.
Do generowania kodu programu lub zasobów
Zmienić dyrektywę dane wyjściowe można wygenerować pliku odpowiedniego typu, takich jak CS, .vb, .resx lub XML.
Wstaw kod, który generuje kod rozwiązania niezbędnych.Na przykład, jeśli chcesz wygenerować trzy deklaracje pola Liczba całkowita w klasie:
<#@ 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 #> }
Zapisz plik i sprawdzić wygenerowany plik, który zawiera teraz następujący kod:
class MyGeneratedClass { private int P1 = 0; private int P2 = 0; private int P3 = 0; }
Generowanie kodu i wygenerowany tekst
Podczas generowania kodu programu, jest najważniejszych w celu uniknięcia wprowadzenia w błąd generowania kodu, który wykonuje w szablonie, a wynikowy wygenerowanego kodu, który staje się częścią rozwiązania.Dwa języki ma być takie same.
W poprzednim przykładzie ma dwie wersje.W jednej wersji generowania kodu jest w języku C#.W tej wersji generowania kodu jest języka Visual Basic.Jednak wygenerowane przez obydwa te tekst jest taki sam, i jest klasą C#.
W ten sam sposób, można użyć Visual C# szablon, aby wygenerować kod w dowolnym języku.Wygenerowany tekst musi być w dowolnym języku określonego, a nie ma być kodu programu.
Tworzenie struktury szablonów tekstu
Na zasadzie dobre praktyki możemy zwykle oddzielić kod szablonu na dwie części:
Konfiguracja lub strony zbierania danych, który ustawia wartości w zmiennych, ale nie zawiera bloki tekstu.W poprzednim przykładzie, ta część jest inicjowania properties.
To jest nazywane czasem w sekcji "model", ponieważ tworzy modelu w sklepie i zwykle odczytuje plik modelu.
Część tekstu generacji (foreach(...){...} w przykładzie), który używa wartości zmiennych.
Nie jest konieczne separacji, ale jest styl łatwiej odczytać szablonu, zmniejszając złożoność części, która zawiera tekst.
Odczytywanie plików lub innych źródeł
Aby uzyskać dostęp do pliku modelu lub bazy danych, kodu szablonu można użyć zespołów, takich jak System.XML.Aby uzyskać dostęp do tych zespołów, należy wstawić dyrektywy, takich jak te:
<#@ assembly name="System.Xml.dll" #>
<#@ import namespace="System.Xml" #>
<#@ import namespace="System.IO" #>
assembly Dyrektywy udostępnia określonego zestawu w kodzie szablonu w taki sam sposób, jak odwołuje się do części Visual Studio projektu.Nie należy uwzględnić odwołanie do plik System.dll, który odwołuje się automatycznie.import Dyrektywy pozwala korzystać z typów bez użycia ich w pełni kwalifikowane nazwy w taki sam sposób jak using dyrektywy w pliku zwykłego programu.
Na przykład po zaimportowaniu System.IO, można zapisać:
<# var properties = File.ReadLines("C:\\propertyList.txt");#>
...
<# foreach (string propertyName in properties) { #>
...
<# For Each propertyName As String In
File.ReadLines("C:\\propertyList.txt")
#>
Otwieranie pliku z nazwą ścieżki względnej
Aby załadować pliku z lokalizacji względem szablonu tekstowego, można użyć this.Host.ResolvePath().Aby użyć tej.Host, należy ustawić hostspecific="true" w template:
<#@ template debug="false" hostspecific="true" language="C#" #>
Następnie można napisać, na przykład:
<# 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
...
#>
Można również użyć this.Host.TemplateFile, który identyfikuje nazwę bieżący plik szablonu.
Typ this.Host (w języku VB, Me.Host) jest Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost.
Pobieranie danych zVisual Studio
Aby korzystać z usług w Visual Studio, ustaw hostSpecific atrybutu i obciążenia EnvDTE zestawu.Następnie można IServiceProvider.GetCOMService() dostęp do DTE i innych usług.Na przykład:
<#@ 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 #>
Porada |
---|
Szablon tekstu jest uruchamiany w danej domenie aplikacji, a usługi są dostępne dla skierowanie.W takim przypadku należy GetCOMService() są bardziej niezawodne niż GetService(). |
Automatycznie ponownego generowania kodu
Zwykle kilka plików w Visual Studio rozwiązania są generowane z jeden model wejściowego.Każdy plik jest generowany z własnej szablonu, ale szablony wszystkie odwoływać się do tego samego modelu.
Zmiana źródłowego modelu, należy ponownie uruchomić wszystkie szablony w rozwiązaniu.W tym celu należy ręcznie wybrać Transform wszystkie szablony na tworzenie menu.
Po zainstalowaniu Visual Studio wizualizacji i modelowania zestaw SDK, może mieć wszystkie szablony Przekształcono automatycznie, ilekroć wykonać kompilację.W tym celu należy edytować pliku projektu (.csproj lub .vbproj) w edytorze tekstu i Dodaj poniższe wiersze w pobliżu na końcu pliku, po innych <import> instrukcji:
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v11.0\TextTemplating\Microsoft.TextTemplating.targets" />
<PropertyGroup>
<TransformOnBuild>true</TransformOnBuild>
<!-- Other properties can be inserted here -->
</PropertyGroup>
Aby uzyskać więcej informacji, zobacz Generowanie kodu w procesie kompilacji.
Raportowanie błędów
Umieszczanie błąd i komunikaty ostrzegawcze w Visual Studio błędów w oknie, można korzystać z tych metod:
Error("An error message");
Warning("A warning message");
Konwertowanie istniejącego pliku do szablonu
To przydatne szablonów jest czy one wyglądać bardzo podobnie plików, które generują, razem z części kodu wstawionego program.Sugeruje to przydatne metody tworzenia szablonu.Najpierw utworzyć to zwykły plik jako prototyp, takich jak Visual C# plików i stopniowo wprowadzenie generowanie kodu, który jest różny wynikowy plik.
Można przekonwertować istniejącego pliku szablonu projektu / czasu
Do swojej Visual Studio projekt, dodawanie pliku typu, który ma zostać wygenerowany, takich jak .cs, .vb, lub .resx pliku.
Testowanie nowy plik, aby upewnić się, że działa.
W Eksploratorze rozwiązań zmienić rozszerzenie nazwy pliku do .tt.
Sprawdź następujące właściwości .tt pliku:
Niestandardowe narzędzia =
TextTemplatingFileGenerator
Akcja kompilacji =
Brak
Wstaw poniższe wiersze na początku pliku:
<#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".cs" #>
Jeśli chcesz zapisać generowania kodu szablonu w Visual Basic, ustaw language atrybutu do "VB" zamiast "C#".
Ustaw extension atrybutu do rozszerzenia nazwy pliku dla typu pliku, który ma zostać wygenerowany, na przykład .cs, .resx, lub .xml.
Zapisz plik.
Pomocniczy pliku jest tworzony o podanym rozszerzeniu.Jego właściwości są prawidłowe dla typu pliku.Na przykład tworzenie akcji powinien mieć wartość właściwości pliku CS skompilować.
Sprawdź, czy wygenerowany plik zawiera taką samą zawartość jak oryginalny plik.
Określ część pliku, który ma zostać różnią się w zależności.Na przykład części, który pojawi się wyłącznie zgodnie z warunkami lub części, która jest powtarzany, lub gdy określone wartości różnią się w zależności.Wstaw generowania kodu.Zapisz plik i sprawdzić, poprawnie wygenerowaniu pliku pomocniczego.Powtórz ten krok.
Wytyczne dotyczące generowania kodu
Zobacz Zalecenia dotyczące pisania szablonów tekstowych T4.
Następne kroki
Następny krok |
Temat |
---|---|
Napisz i debugowanie bardziej zaawansowaną wersję szablonu tekstu, z kodu, który używa funkcji pomocniczych, dołączonych plików i danych zewnętrznych. |
|
Generowanie dokumentów za pomocą szablonów w czasie wykonywania. |
Generowanie tekstu czasu wykonywania przy użyciu szablonów tekstowych T4 |
Uruchom generowanie tekstu poza Visual Studio. |
|
Przekształć dane w postaci języka specyficznego dla domeny. |
|
Napisz dyrektywy procesorów Przekształcenie źródła danych. |