T4-Include-Direktive
In einer Textvorlage in Visual Studio können Sie Text aus einer anderen Datei mit einer <#@include#>-Direktive einschließen.Sie können include-Direktiven an einer beliebigen Stelle in einer Textvorlage platzieren, und zwar vor dem ersten Klassenfunktionsblock <#+ ... #>.Die eingeschlossenen Dateien können auch include-Direktiven und andere Direktiven enthalten.Dadurch können Sie Vorlagencode und Text mit Codebausteinen zwischen Vorlagen freigeben.
Verwenden von Include-Direktiven
<#@ include file="filePath" #>
filePath kann absolut oder relativ zur aktuellen Vorlagendatei sein.
Außerdem können bestimmte Visual Studio-Erweiterungen eigene Verzeichnisse angeben, in denen nach Includedateien gesucht werden soll.Wenn Sie z. B. das Visualisierungs- und Modellierungs-SDK (DSL-Tools) installiert haben, wird der folgende Ordner der Includeliste hinzugefügt: Program Files\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\DSL SDK\DSL Designer\11.0\TextTemplates.
Diese zusätzlichen Includeordner können von der Dateierweiterung der einschließenden Datei abhängen.Zum Beispiel können nur einschließende Dateien mit der Dateierweiterung .tt auf den Includeordner der DSL-Tools zugreifen.
filePath kann durch "%" begrenzte Umgebungsvariablen einschließen.Beispiele:
<#@ include file="%HOMEPATH%\MyIncludeFile.t4" #>
Der Name einer eingebundenen Datei muss nicht die Erweiterung ".tt".
Vielleicht möchten Sie verwenden eine andere Erweiterung wie z. B. ".t4" Dateien enthalten.Dies liegt daran, dass beim Hinzufügen einer .tt-Datei zu einem Projekt Visual Studio die Eigenschaft Benutzerdefiniertes Tool automatisch auf TextTemplatingFileGenerator festlegt.Normalerweise sollen eingeschlossene Dateien nicht einzeln transformiert werden.
Andererseits sollten Sie beachten, dass die Dateierweiterung in einigen Fällen Einfluss darauf hat, welche zusätzlichen Ordner nach Includedateien durchsucht werden.Dies könnte wichtig sein, wenn eine eingeschlossene Datei andere Dateien enthält.
Der eingeschlossene Inhalt wird fast so verarbeitet, als wäre er Teil der jeweiligen Textvorlage.Sie können jedoch auch dann eine Datei einschließen, die einen Klassenfunktionsblock <#+...#> enthält, wenn nach der include-Direktive normale Text- und Standardkontrollblöcke eingefügt werden.
MyTextTemplate.tt:
<#@ output extension=".txt" #>
Output message 1 (from top template).
<#@ include file="TextFile1.t4"#>
Output message 5 (from top template).
<#
GenerateMessage(6); // defined in TextFile1.t4
AnotherGenerateMessage(7); // defined in TextFile2.t4
#>
TextFile1.t4:
Output Message 2 (from included file).
<#@include file="TextFile2.t4" #>
Output Message 4 (from included file).
<#+ // Start of class feature control block.
void GenerateMessage(int n)
{
#>
Output Message <#= n #> (from GenerateMessage method).
<#+
}
#>
TextFile2.t4:
Output Message 3 (from included file 2).
<#+ // Start of class feature control block.
void AnotherGenerateMessage(int n)
{
#>
Output Message <#= n #> (from AnotherGenerateMessage method).
<#+
}
#>
Die infolge des Vorgangs generierte Datei "MyTextTemplate.txt":
Output message 1 (from top template).
Output Message 2 (from included file).
Output Message 3 (from included file 2).
Output Message 4 (from included file).
Output message 5 (from top template).
Output Message 6 (from GenerateMessage method).
Output Message 7 (from AnotherGenerateMessage method).