代码生成和 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。
本节内容
使用 T4 文本模板的运行时文本生成
在生成文本文件的任何应用程序中,预编译的文本模板是定义文本的一种简单而可靠的方法。 但是,此方法不能用于在运行时更改的文本模板。使用 T4 文本模板生成设计时代码
从模型生成代码和其他资源时,可以通过更新该模型来更新应用程序。生成过程中的代码生成
如果已安装 Visual Studio 可视化和建模 SDK,则可以确保生成的软件与模型中的更改保持同步。编写 T4 文本模板
文本模板文件的语法。演练:使用文本模板生成代码
演示代码生成的一种使用方法。调试 T4 文本模板
如何调试文本模板和某些常见文本模板错误。使用 TextTransform 实用工具生成文件
可以用于运行文本模板转换的命令行工具。自定义 T4 文本转换
如何编写指令处理器并自定义自己的数据源的模板化主机。