有没有一种方法可以从代码中以编程方式运行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文档更改影响的。这看起来可能没什么大不了的,但它会导致源代码管理检查所有生成的文件,如果您有很多文档,转换实际上可能需要相当长的时间。谢谢你的帮助。