2
我想在我的擴展程序的少數.tt
文件上保存/運行自定義工具。我不想循環解決方案/項目中的所有文件,而是希望能夠使用文件的相對路徑(或完整路徑)來執行保存/運行自定義工具。如何使用EnvDTE以編程方式運行自定義工具或保存文件?
有沒有辦法讓一個ProjectItem
對象給出文件的路徑($(SolutionDir)/MyProject/MyFile.tt
),所以我可以執行它的方法?
我想在我的擴展程序的少數.tt
文件上保存/運行自定義工具。我不想循環解決方案/項目中的所有文件,而是希望能夠使用文件的相對路徑(或完整路徑)來執行保存/運行自定義工具。如何使用EnvDTE以編程方式運行自定義工具或保存文件?
有沒有辦法讓一個ProjectItem
對象給出文件的路徑($(SolutionDir)/MyProject/MyFile.tt
),所以我可以執行它的方法?
您可以使用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;
}
而不是'item.DTE.ExecuteCommand( 「Project.RunCustomTool」);',我只好用'(item.Object爲VSProjectItem).RunCustomTool();' – Omar
爲奧馬爾說(DTE。 Solution.FindProjectItem(path).Object as VSProjectItem).RunCustomTool()也適用於我。還需要參考VSLangProj.dll。 – Prabu