使用自定义主机处理文本模板

文本模板转换过程采用文本模板文件作为输入,并生成文本文件作为输出。 可以从 Visual Studio 扩展或从安装 Visual Studio 的计算机上运行的独立应用程序调用文本转换引擎。 但是,必须提供 文本模板化主机。 此类将模板连接到环境,查找程序集和包含文件等资源,以及处理输出和错误消息。

小窍门

如果要编写将在 Visual Studio 中运行的包或扩展,请考虑使用文本模板化服务,而不是编写自己的主机。 有关详细信息,请参阅 在 VS 扩展中调用文本转换

注释

不建议在服务器应用程序中使用文本模板转换。 不建议使用文本模板转换,除非是在单个线程中。 这是因为文本模板化引擎重新使用单个 AppDomain 来翻译、编译和执行模板。 翻译后的代码不设计为线程安全。 引擎旨在串行处理文件,因为它们在设计时位于 Visual Studio 项目中。

对于运行时应用程序,请考虑使用预处理的文本模板:请参阅 Run-Time 使用 T4 文本模板生成文本

如果应用程序使用编译时固定的一组模板,则使用预处理的文本模板更容易。 如果应用程序将在未安装 Visual Studio 的计算机上运行,也可以使用此方法。 有关详细信息,请参阅 使用 T4 文本模板进行运行时文本生成

在应用程序中执行文本模板

若要执行文本模板,请调用 ProcessTemplate 方法:Microsoft.VisualStudio.TextTemplating.Engine

using Microsoft.VisualStudio.TextTemplating;
...
Engine engine = new Engine();
string output = engine.ProcessTemplate(templateString, host);

应用程序必须查找并提供模板,并且必须处理输出。

在参数中 host ,必须提供实现 ITextTemplatingEngineHost 的类。 这由引擎回调。

主机必须能够记录错误、解决对程序集的引用并包括文件、提供模板可以在其中执行的应用程序域,并为每个指令调用相应的处理器。

Microsoft.VisualStudio.TextTemplating.EngineMicrosoft.VisualStudio.TextTemplating.*.0.dll中定义, ITextTemplatingEngineHostMicrosoft.VisualStudio.TextTemplating.Interfaces.*.0.dll中定义。

本部分内容

演练:创建自定义文本模板主机 演示如何创建自定义文本模板主机,使文本模板功能在 Visual Studio 外部可用。

Reference

ITextTemplatingEngineHost