代码之家  ›  专栏  ›  技术社区  ›  Alex

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

  •  7
  • Alex  · 技术社区  · 16 年前

    有没有一种方法可以从代码中以编程方式运行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 回复  |  直到 16 年前
        1
  •  5
  •   Oleg Sych    16 年前

    Jean-Mark Prieur DSL团队在本文的第4部分中解释了如何使用自定义工具来实现这一点 DSL Tools Lab . 您也可以使用DSL模型直接执行此操作 ITextTemplating here