次の方法で共有


T4 インクルード ディレクティブ

Visual Studio のテキスト テンプレートでは、<#@include#> ディレクティブを使用することによって、別のファイルのテキストをインクルードできます。include ディレクティブは、テキスト テンプレートに含まれる最初のクラス機能ブロック (<#+ ... #>) の前の任意の場所に配置できます。インクルード ファイルに、include ディレクティブや他のディレクティブを含めることもできます。これにより、テンプレート間でテンプレート コードや定型句を共有できるようになります。

include ディレクティブの使用

<#@ include file="filePath" #>
  • filePath には、絶対パスを指定することも、現在のテンプレート ファイルを基準とした相対パスを指定することもできます。

    また、特定の Visual Studio 拡張機能で独自のディレクトリを指定して、インクルード ファイルを検索することもできます。たとえば、Visualization and Modeling SDK (DSL ツール) がインストールされている場合は、インクルード一覧に Program Files\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\DSL SDK\DSL Designer\11.0\TextTemplates フォルダーが追加されます。

    追加されるこれらのインクルード フォルダーは、インクルード ファイルの拡張子によって異なります。たとえば、DSL ツールのインクルード フォルダーは、インクルード ファイルの拡張子が .tt の場合にのみ追加されます。

  • filePath には、"%" で区切られた環境変数を含めることもできます。次に例を示します。

    <#@ include file="%HOMEPATH%\MyIncludeFile.t4" #>
    
  • インクルード ファイルの名前は、拡張機能を使用する必要はありません".tt"。

    などの他の拡張機能を使用することができます".t4"を含めるファイル。これは、.tt ファイルをプロジェクトに追加すると、Visual Studio によって "カスタム ツール" プロパティが自動的に TextTemplatingFileGenerator に設定されるためです。通常、インクルード ファイルを個別に変換することは望ましくありません。

    一方、ファイルの拡張子によって、インクルード ファイルの検索先となる追加フォルダーが決まる場合があることに注意してください。これは、インクルード ファイルに他のファイルが含まれている場合に重要となります。

  • インクルードされたコンテンツは、インクルード先のテキスト テンプレートに元から含まれていた場合とほとんど同じように処理されます。ただし、include ディレクティブの後に通常のテキスト ブロックと標準コントロール ブロックが続く場合でも、クラス機能ブロック (<#+...#>) を含むファイルをインクルードすることができます。

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

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