代码生成和 T4 文本模板

在 Visual Studio 中,“T4 文本模板”是由一些文本块和控制逻辑组成的混合模板,它可以生成文本文件。 在 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 文本模板

  • 在 Visual Studio 中执行设计时 T4 文本模板,以便定义应用程序的部分源代码和其他资源。
    通常,您可以使用读取单个输入文件或数据库中的数据的多个模板,并生成一些 .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. 
    }
    

    生成的 .cs 文件将类似于以下内容,具体取决于 XML 文件中的值:

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

    另举一例,输入可能是业务活动中的工作流关系图。 用户更改其业务工作流时,或您开始与具有不同工作流的新用户协同工作时,可以轻松地重新生成代码以适合新模型。

    要求变化时,设计时模板可更快且更可靠地更改配置。 通常,可以根据业务需求定义输入,就像在工作流示例中那样。 这样更便于与用户讨论更改。 因此,在敏捷开发过程中,设计时模板是非常有用的工具。

    若要创建设计时模板,请向您的项目中添加**“文本模板”文件。 另外,您还可以添加纯文本文件并将其“自定义工具”属性设置为“TextTemplatingFileGenerator”**。

    有关更多信息,请参见使用 T4 文本模板生成设计时代码。 有关模板语法的更多信息,请参见编写 T4 文本模板

备注

“模型”这一术语有时用于描述一个或多个模板读取的数据。模型可以是任何格式,可位于任何类型的文件或数据库中。它并非必须为 UML 模型或域特定语言模型。'“模型”并不类似于代码,它仅指示可依据业务概念定义数据。

文本模板转换功能命名为 T4。

本节内容

请参见

概念

如何:从 UML 模型生成文件

其他资源

从域特定语言生成代码