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

Ale*_*lex 7 .net c# 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);
}
Run Code Online (Sandbox Code Playgroud)

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

Ole*_*ych 6

来自DSL团队的Jean-Mark Prieur解释了如何使用DSL Tools Lab第4部分中的自定义工具执行此操作.您也可以使用ITextTemplating服务直接从DSL模型执行此操作.更多关于模板转换如何在这里工作.