T4 包含指示詞

更新:2011 年 3 月

在 Visual Studio 的文字範本中,您可以使用 <#@include#> 指示詞來納入另一個檔案的文字。 您可以將 include 指示詞放在文字範本中第一個 <#+ ... #> 類別功能區塊之前的任何位置。 被納入的檔案也包含 include 指示詞和其他指示詞。 如此可讓您在範本之間共用範本程式碼和重複使用文字。

使用包含指示詞

<#@ include file="filePath" #>
  • filePath 可以是目前範本檔的絕對路徑或相對路徑。

    此外,特定的 Visual Studio 擴充功能也可以指定自己的目錄來搜尋 Include 檔。 例如,已安裝「視覺化和模型 SDK」(DSL 工具) 時,下列資料夾會加到 Include 清單中:Program Files\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\DSL SDK\DSL Designer\10.0\TextTemplates。

    這些額外的 Include 資料夾可能相依於納入的檔案其副檔名。 例如,只有當納入的檔案其副檔名為 .tt 時才能使用 DSL 工具的 Include 資料夾

  • filePath 可以包含以 "%" 分隔的環境變數。 例如:

    <#@ include file="%HOMEPATH%\MyIncludeFile.t4" #>
    
  • 納入之檔案的名稱不需要使用 ".tt" 副檔名。

    您可以使用其他副檔名 (例如 ".t4"),做為納入之檔案的副檔名。 這是因為當您將 .tt 檔案加入至專案時,Visual Studio 會自動將 [自訂工具] 屬性設為 TextTemplatingFileGenerator。 您通常不希望被納入的檔案進行個別轉換。

    另一方面,您應該留意副檔名在某些情況下會影響其他要搜尋 Include 檔的資料夾。 被納入的檔案包含其他檔案時,這一點可能十分重要。

  • 處理所加入的內容時,幾乎可以將此內容當做是進行加入之文字範本的一部分來處理。 而且,即使 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).

變更記錄

日期

記錄

原因

2011 年 3 月

從父主題中分割。

資訊加強。