2013-07-11 17 views
2

我想在我的擴展程序的少數.tt文件上保存/運行自定義工具。我不想循環解決方案/項目中的所有文件,而是希望能夠使用文件的相對路徑(或完整路徑)來執行保存/運行自定義工具。如何使用EnvDTE以編程方式運行自定義工具或保存文件?

有沒有辦法讓一個ProjectItem對象給出文件的路徑($(SolutionDir)/MyProject/MyFile.tt),所以我可以執行它的方法?

回答

3

您可以使用EnvDTE.Solution類型的FindProjectItem方法通過名稱在當前解決方案中查找文件。 ExecuteCommand方法依賴於當前的UI上下文;所以必須選擇該項目,否則呼叫失敗。

private bool TryExecuteTextTemplate(string filename) 
{ 
    var dte = (DTE2)this.GetService(typeof(SDTE)); 
    Solution solution = dte.Solution; 
    if ((solution != null) && solution.IsOpen) 
    { 
     ProjectItem item = solution.FindProjectItem(filename); 
     if (item != null) 
     { 
      // TODO: track the item in the Solution Explorer 

      try 
      { 
       item.DTE.ExecuteCommand("Project.RunCustomTool"); 
       return true; 
      } 
      catch (COMException) 
      { 
      } 
     } 
    } 

    return false; 
} 
+2

而不是'item.DTE.ExecuteCommand( 「Project.RunCustomTool」);',我只好用'(item.Object爲VSProjectItem).RunCustomTool();' – Omar

+0

爲奧馬爾說(DTE。 Solution.FindProjectItem(path).Object as VSProjectItem).RunCustomTool()也適用於我。還需要參考VSLangProj.dll。 – Prabu

相關問題