4

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

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

4

1 回答 1

5

您可以使用该类型的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)
    {
        VSProjectItem projectItem;
        ProjectItem item = solution.FindProjectItem(filename);
        if (item != null && ((projectItem = item.Object as VSProjectItem) != null))
        {
            // TODO: track the item in the Solution Explorer

            try
            {
                projectItem.RunCustomTool();
                return true;
            }
            catch (COMException) 
            { 
            }
        }
    }

    return false;
}
于 2013-07-11T22:12:39.860 回答