繁体   English   中英

有没有办法以编程方式在解决方案资源管理器中隐藏项目?

[英]Is there a way to hide a project in Solution Explorer programatically?

我正在开发 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;
}

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

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

谢谢!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM