以编程方式运行T4文本模板

时间:2009-12-04 12:11:37

标签: c# .net t4

有没有办法以编程方式从代码运行T4文本模板?我正在制作一个自定义域特定语言,我希望每次用户保存时都会运行相关的文本模板。目前,这就是我在DSL模型中所做的事情:

protected override void OnDocumentSaved(EventArgs e)
{
    IVsCommandWindow commandWindow = (IVsCommandWindow)this.ServiceProvider.GetService(typeof(IVsCommandWindow));
    if (commandWindow != null)
    {
        commandWindow.ExecuteCommand("TextTransformation.TransformAllTemplates");
    }
    base.OnDocumentSaved(e);
}

这样可行,但它有一个非常烦人的副作用。如果项目有多个DSL文档,每个文档都有相关的文本模板,那么它们将全部运行,而不仅仅是受给定DSL文档更改影响的文档。这可能看起来不是什么大问题,但它会导致源代码控制检出所有生成的文件,如果你有很多文档,那么转换实际上可能需要很长时间。谢谢你的帮助。

2 个答案:

答案 0 :(得分:6)

来自DSL团队的

Jean-Mark Prieur解释了如何使用DSL Tools Lab第4部分中的自定义工具执行此操作。您也可以使用ITextTemplating服务直接从DSL模型执行此操作。有关模板转换如何工作的更多信息here

答案 1 :(得分:2)