2013-01-21 104 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來運行命令,而不是自行遍歷,如果您只是要將它們全部運行。