0

我正在开发 Visual Studio 2010 的扩展,并试图弄清楚如何在解决方案资源管理器 ( UIHierarchy) 中隐藏项目,而不将其从底层解决方案中删除。我一直在寻找,并找到了一些线索,但我只是不够了解,无法将它们放在一起。

据我所知,Visual Studio 甚至不会创建一个UIHierarchy实例,除非该项目是可见的(即树已经扩展到它),所以我想如果我想要一个项目消失,我应该能够简单地从树中删除实例。

我的第一个问题是,我的假设是否正确?

假设答案是肯定的,那么我有以下代码(为这篇文章简化了):

private void HideProject(IVsHierarchy project)
{
    ((IVsUIHierarchyWindow2)_uiHierarchyWindow).RemoveUIHierarchy(GetUIHierarchyFromHierarchy(project));
}

private IVsUIHierarchy GetUIHierarchyFromHierarchy(IVsHierarchy project)
{
    UIHierarchy solutionExplorer = ((DTE2)_dte).ToolWindows.SolutionExplorer;
    foreach (UIHierarchyItem hierarchy in solutionExplorer.UIHierarchyItems.Item(1).UIHierarchyItems)
    {
        // What do I do here?
    }
    return null;
}

显然,这还没有做任何事情,因为我完全被卡住了。我怀疑代码将不得不变得递归(以处理文件夹中包含的项目等),但现在,我只关心所有项目都直接包含在解决方案下方的简单情况。

有没有人知道比微软(恕我直言不足)文档更好的参考资料?有没有人尝试过这样做?我该怎么做呢?

谢谢!

4

1 回答 1

1

我不确定项目节点是否可行。至于文件节点,有一个 VSHPROPID_IsNonMemberItem 层次结构属性。看看这个线程,还有这个

于 2012-03-31T11:10:04.360 回答