2013-01-21 73 views
1

上运行T4如何通过插件在项目中运行T4文件?任何提示/线索?我发现EnvDte文档特别缺乏。VIsual Studio插件在Build

我得到这个解决方案,因为我需要在构建事件上运行我的T4模板。我不想在每次更改时手动运行自定义工具。我不能从命令行运行它,因为T4脚本具有对DTE对象的引用,并且在从cmd运行时它只是禁止出口。

我也考虑过使用宏,但宏在VS2012上不可用,并且在我的本地机器上有一个错误,它阻止了我启动宏IDE。所以这不是一个好的短期/长期解决方案。

最好的解决方案似乎编写自己的插件来运行构建T4文件。这是据我得到:

public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) 
{ 
    _applicationObject = (DTE2)application; 
    _addInInstance = (AddIn)addInInst; 
    _applicationObject.Events.BuildEvents.OnBuildBegin += customBuildHander; 

} 

void customBuildHander(vsBuildScope Scope, vsBuildAction Action) 
     { 
      if (Scope == vsBuildScope.vsBuildScopeProject) 
      { 
       //Need to run steps 1 thru 3 here! 
      } 
     } 

我需要符合以下例程在上面的代码以某种方式:

  1. 查找项目
  2. 运行T4在TT所有T4文件文件,同时传递DTE对象,以便它们可以从T4文件访问
  3. 同时声明环境变量(如$(ProjectDir),以便它们可以在T4脚本中读取< - 我不知道这是否与DTE或是一个独立的过程。

请帮忙!

+0

我认为vscommands有一个选项可以做到这一点? –

+0

你见过http://stackoverflow.com/questions/1646580/get-visual-studio-to-run-a-t4-template-on-every-build –

+0

@AlexeiLevenkov是的,尝试了所有这些,但我的t4脚本barfs在所有的DTE和环境变量参考。 – Alwyn

回答

2

您应该使用DTE基础结构调用IDE命令TransformAllTemplates来运行命令,而不是自行遍历,如果您只是要将它们全部运行。