Condividi tramite


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).