Sdílet prostřednictvím


T4 – direktiva Include

V textové šabloně v sadě Visual Studio můžete pomocí direktivy zahrnout text z jiného <#@include#> souboru. Direktivy můžete umístit include kdekoli v textové šabloně před blok <#+ ... #>funkce první třídy . Zahrnuté soubory mohou také obsahovat include direktivy a další direktivy. Díky tomu můžete kód šablony a často používaný text sdílet mezi šablonami.

Použití direktiv include

<#@ include file="filePath" [once="true"] #>
  • filePath může být absolutní nebo relativní vzhledem k aktuálnímu souboru šablony.

    Kromě toho můžou konkrétní rozšíření sady Visual Studio určit vlastní adresáře, které se mají vyhledat v souborech zahrnutí. Pokud jste například nainstalovali sadu Visual and Modeling SDK (DSL Tools), přidá se do seznamu zahrnutí následující složka: Program Files\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\DSL SDK\DSL Designer\11.0\TextTemplates.

    Tyto další složky vkládaných souborů mohou záviset na příponě vkládaného souboru. Například zahrnutá složka nástrojů DSL je přístupná pouze pro zahrnutí souborů, které mají příponu souboru. .tt

  • filePath může obsahovat proměnné prostředí oddělené znakem %. Příklad:

    <#@ include file="%HOMEPATH%\MyIncludeFile.t4" #>
    
  • Název zahrnutého souboru nemusí příponu ".tt"používat .

    Můžete chtít použít jiné rozšíření, například ".t4" pro zahrnuté soubory. Důvodem je to, že když přidáte .tt soubor do projektu, sada Visual Studio automaticky nastaví vlastní nástroj vlastnost na TextTemplatingFileGenerator. Vkládané soubory obvykle nechcete transformovat individuálně.

    Na druhé straně byste měli vědět, že v některých případech přípona souboru ovlivňuje, v jakých dalších složkách se budou hledat vkládané soubory. To může být důležité, pokud máte vkládaný soubor, který obsahuje jiné soubory.

  • Vložený obsah se zpracuje téměř jako kdyby byl součástí textové šablony, která ho vkládá. Můžete však zahrnout soubor, který obsahuje blok <#+...#> funkce třídy, i když include direktiva následuje běžný text a standardní řídicí bloky.

  • Umožňuje once="true" zajistit, aby šablona byla zahrnuta pouze jednou, i když je vyvolána z více než jednoho jiného souboru zahrnutí.

    Tato funkce usnadňuje vytvoření knihovny opakovaně použitelných fragmentů kódu T4, které můžete zahrnout do běhu, aniž byste se museli obávat, že některé další fragmenty kódu už je obsahovaly. Předpokládejme například, že máte knihovnu velmi jemně odstupňovaných fragmentů kódu, které se zabývají zpracováním šablon a generováním jazyka C#. Ty pak používají některé další nástroje specifické pro úlohy, jako je generování výjimek, které pak můžete použít z jakékoli další šablony specifické pro aplikaci. Pokud si nakreslíte graf závislostí, uvidíte, že některé fragmenty kódu budou vloženy několikrát. once Parametr ale zabrání následným zahrnutím.

    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).
<#+
}
#>

Výsledný vygenerovaný soubor 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).

Použití vlastností projektu v nástroji MSBuild a Visual Studio

I když v direktivě include můžete použít makra sady Visual Studio, jako je $(SolutionDir), nefungují v nástroji MSBuild. Chcete-li transformovat šablony v sestavovacím počítači, je nutné místo toho použít vlastnosti projektu.

Úpravou souboru .csproj nebo .vbproj definujte vlastnost projektu. Tento příklad definuje vlastnost s názvem myIncludeFolder:

<!-- Define a project property, myIncludeFolder: -->
<PropertyGroup>
    <myIncludeFolder>$(MSBuildProjectDirectory)\..\libs</myIncludeFolder>
</PropertyGroup>

<!-- Tell the MSBuild T4 task to make the property available: -->
<ItemGroup>
    <T4ParameterValues Include="myIncludeFolder">
      <Value>$(myIncludeFolder)</Value>
    </T4ParameterValues>
  </ItemGroup>

Tuto vlastnost projektu nyní můžete použít v textových šablonách, které se správně transformují jak v sadě Visual Studio, tak v nástroji MSBuild:

<#@ include file="$(myIncludeFolder)\defs.tt" #>