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

8

有没有一种方法可以通过编程从代码中运行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文档更改影响的那些文档。这看起来可能不是很重要,但它会导致源代码控制检出所有生成的文件,如果你有很多文档,转换可能实际上需要相当长的时间。感谢任何帮助。

1个回答

5

DSL团队的Jean-Mark Prieur在DSL工具实验室的第四部分中解释了如何使用自定义工具完成此操作。您还可以使用ITextTemplating服务直接从DSL模型中执行此操作。有关模板转换的更多信息,请单击此处


我现在没有时间尝试,但是从浏览那份文件来看,它看起来非常有前途。一旦我测试过了,如果有效的话,我会将您的答案标记为已接受。似乎自定义工具是正确的选择。 - Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接