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