文本模板转换过程采用文本模板文件作为输入,并生成新的文本文件作为输出。 例如,可以使用文本模板生成 Visual Basic 或 C# 代码,也可以生成 HTML 报表。
三个组件参与此过程:引擎、主机和指令处理器。 引擎控制进程;它与主机和指令处理器交互以生成输出文件。 主机提供与环境的任何交互,例如查找文件和程序集。 指令处理器添加了功能,例如从 XML 文件或数据库读取数据。
文本模板转换过程由两个步骤执行。 首先,引擎创建一个临时类,该类称为生成的转换类。 此类包含由指令和控制块生成的代码。 之后,引擎将编译并执行生成的转换类以生成输出文件。
Components
| 组件 | Description | 可自定义 (是/否) |
|---|---|---|
| Engine | 引擎组件控制文本模板转换过程 | 否。 |
| Host | 主机是引擎和用户环境之间的接口。 Visual Studio 是文本转换过程的主机。 | 是的。 可以编写自定义主机。 |
| 指令处理器 | 指令处理器是处理文本模板中的指令的类。 可以使用指令向输入源中的文本模板提供数据。 | 是的。 可以编写自定义指令处理器 |
引擎
引擎从主机接收模板作为字符串,该字符串处理转换过程中使用的所有文件。 然后,引擎要求主机查找任何自定义指令处理器和环境的其他方面。 然后,引擎编译并运行生成的转换类。 引擎将生成的文本返回到主机,主机通常会将文本保存到文件中。
主机
主机负责与转换过程外部环境相关的任何内容,包括:
查找引擎或指令处理器请求的文本和二进制文件。 主机可以搜索目录和全局程序集缓存来查找程序集。 主机可以找到引擎的自定义指令处理器代码。 主机还可以查找和读取文本文件,并将其内容作为字符串返回。
提供引擎用于创建生成的转换类的标准程序集和命名空间的列表。
提供引擎编译和执行生成的转换类时使用的应用程序域。 使用单独的应用程序域来保护主机应用程序免受模板代码中的错误的影响。
写入生成的输出文件。
为生成的输出文件设置默认扩展名。
处理文本模板转换错误。 例如,主机可以在用户界面中显示错误,或将其写入文件。 (在 Visual Studio 中,错误显示在错误消息窗口中。
如果用户在没有提供值的情况下调用指令,则提供所需的参数值。 指令处理器可以指定指令的名称和参数,并要求主机提供默认值(如果有)。
指令和指令处理器
指令是文本模板中的命令。 它为生成过程提供参数。 通常指令定义模型或其他输入的源和类型,以及输出文件的文件扩展名。
指令处理器可以处理一个或多个指令。 转换模板时,必须已安装可以处理模板中的指令的指令处理器。
指令的工作原理是在生成的转换类中添加代码。 从文本模板调用指令,引擎在创建生成的转换类时处理所有指令调用。 成功调用指令后,在文本模板中编写的其余代码可以依赖于指令提供的功能。 例如,您可以在模板中对import指令进行以下调用:
<#@ import namespace="System.Text" #>
标准指令处理器将此 using 转换为生成的转换类中的语句。 然后,可以在模板代码的其余部分中使用该 StringBuilder 类,而无需将其限定为 System.Text.StringBuilder。