Direttiva include T4
In un modello di testo di Visual Studio, è possibile includere testo da un altro file tramite una direttiva <#@include#>.È possibile inserire le direttive include ovunque all'interno di un modello di testo prima del primo blocco della funzionalità di classe <#+ ... #>.I file inclusi possono contenere anche direttive include e altre direttive.Questo consente all'utente di condividere un codice del modello e un boilerplate tra modelli.
Utilizzo delle direttive Include
<#@ include file="filePath" #>
filePath possono essere assoluti o relativi al file modello corrente.
Inoltre, le estensioni specifiche di Visual Studio possono specificare le proprie directory per cercare i file di inclusione.Ad esempio, una volta installato l'SDK di visualizzazione e modellazione (Strumenti DSL), la seguente cartella viene aggiunta all'elenco di inclusione: Program Files\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\DSL SDK\DSL Designer\11.0\TextTemplates.
Queste cartelle di inclusione aggiuntive potrebbero dipendere dall'estensione del file incluso.Ad esempio, la cartella di inclusione di Strumenti DSL è accessibile soltanto ai file inclusi con l'estensione .tt
filePath può includere le variabili di ambiente delimitate da "%".Di seguito è riportato un esempio:
<#@ include file="%HOMEPATH%\MyIncludeFile.t4" #>
Il nome di un file incluso non dispone di utilizzare l'estensione ".tt".
È possibile utilizzare un'altra estensione, ad esempio ".t4" per i file inclusi.Questo perché, quando si aggiunge un file .tt in un progetto, Visual Studio imposta automaticamente la proprietà Strumento personalizzato su TextTemplatingFileGenerator.Non è in genere consigliabile che i file inclusi vengano trasformati singolarmente.
D'altra parte, occorre tener presente che in alcuni casi, l'estensione di file determina in quali cartelle aggiuntive verranno cercati i file di inclusione.Questo potrebbe essere importante quando si dispone di un file incluso che include altri file.
Il contenuto incluso viene elaborato più o meno come se facesse parte del modello di testo che include.Tuttavia, è possibile includere un file che contiene un blocco della funzionalità di classe <#+...#> anche se la direttiva include è seguita da testo ordinario e blocchi di controllo standard.
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).
<#+
}
#>
Il file generato risultante, 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).