共用方式為


程式碼產生和 T4 文字範本

更新:2011 年 3 月

在 Visual Studio 中,「T4 文字範本」(T4 Text Template) 混合了文字區塊和可產生文字檔的控制邏輯。 控制邏輯會以 Visual C# 或 Visual Basic 撰寫為程式碼片段。產生的檔案可以是任何類型的文字,例如網頁、資源檔或任何語言的原始程式碼。

T4 文字範本有兩種:

  • 執行階段 T4 文字範本 (「前置處理過的」範本) 會在應用程式中執行以產生文字字串,一般做為其輸出的一部分。
    例如,您可以建立用來定義 HTML 網頁的範本:

    <html><body>
     The date and time now is: <#= DateTime.Now #>
    </body></html>
    

    請注意,範本與產生的輸出類似。 範本與產生的輸出之間的相似性,有助於您避免在要變更範本時發生錯誤。

    此外,範本也包含程式碼的片段。 您可以使用這些片段來重複文字區段,建立條件式區段,以及顯示應用程式的資料。

    為產生輸出,應用程式會呼叫範本所產生的函式。 例如:

    string webResponseText = new MyTemplate().TransformText();
    

    應用程式可以在未安裝 Visual Studio 的電腦上執行。

    若要建立執行階段範本,請將 [前置處理過的文字範本] 檔案加入至專案。 此外,您也可以加入純文字檔,並將其 [自訂工具] 屬性設為 [TextTemplatingFilePreprocessor]。

    如需詳細資訊,請參閱使用前置處理過的 T4 文字範本在執行階段產生文字。 如需範本語法的詳細資訊,請參閱撰寫 T4 文字範本

  • 設計階段 T4 文字範本會在 Visual Studio 中執行,以定義原始程式碼的一部分以及應用程式的其他資源。
    您通常會使用幾個範本讀取單一輸入檔案或資料庫中的資料,然後產生部分 .cs、.vb 或其他原始程式檔。 每個範本都會產生一個檔案, 並且在 Visual Studio 或 MSBuild 中執行。

    例如,輸入資料可以是組態資料的 XML 檔案。 每當您在開發期間編輯 XML 檔案時,文字範本就會重新產生應用程式程式碼的一部分。 其中一個範本可能類似下列範例:

    <#@ output extension=".txt" #>
    <#@ assembly name="System.Xml" #>
    <#
     System.Xml.XmlDocument configurationData = ...; // Read a data file here.
    #>
    namespace Fabrikam.<#= configurationData.SelectSingleNode("jobName").Value #>
    {
      ... // More code here. 
    }
    

    視 XML 檔案中的值而定,產生的 .cs 檔案將與下面類似:

    namespace Fabrikam.FirstJob
    {
      ... // More code here. 
    }
    

    另一個範例是,輸入可以是商務活動中的工作流程圖。 當使用者變更商務工作流程,或您與工作流程不同的新使用者開始工作時,很容易重新產生符合新模型的程式碼。

    當需求變更時,設計階段範本會讓組態的變更更快速、更可靠。 如工作流程範例所示,輸入通常是依照商務需求定義的。 這樣比較容易與使用者討論變更。 因此,設計階段範本對敏捷式開發流程來說是很有用的工具。

    若要建立設計階段範本,請將 [文字範本] 檔案加入至專案。 此外,您也可以加入純文字檔,並將其 [自訂工具] 屬性設為 [TextTemplatingFileGenerator]。

    如需詳細資訊,請參閱使用 T4 文字範本在設計階段產生程式碼。 如需範本語法的詳細資訊,請參閱撰寫 T4 文字範本

注意事項注意事項

「模型」(Model) 一詞有時候被用來描述由一個或多個範本讀取的資料。 模型可以是以任何檔案或資料庫類型為形式的任何格式。 它不一定必須是 UML 模型或 Domain-Specific Language 模型。' 「模型」只指出資料可以依照商務概念定義,而非類似於程式碼。

文字範本轉換功能的名稱為 T4。

本章節內容

資源

T4 開發人員中心 (英文) 收集 T4 的相關範例、秘訣以及常見問題。

請參閱

其他資源

HOW TO:從 UML 模型產生檔案

從網域指定的語言產生程式碼

變更記錄

日期

記錄

原因

2011 年 3 月

強調執行階段與設計階段範本之間的差異。

客戶回函。