如何使用EnvDTE以编程方式运行自定义工具或保存文件?

时间:2013-07-11 15:40:10

标签: visual-studio-extensions envdte

我想在我的扩展程序中的少数.tt个文件中保存/运行自定义工具。我不想遍历解决方案/项目中的所有文件,而是希望能够使用文件的相对(或完整)路径来执行保存/运行自定义工具。

有没有办法在给定文件路径(ProjectItem)的情况下获取$(SolutionDir)/MyProject/MyFile.tt对象,以便我可以在其上执行方法?

1 个答案:

答案 0 :(得分:2)

您可以使用FindProjectItem类型的EnvDTE.Solution方法按名称查找当前解决方案中的文件。 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;
}