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

C# 有没有办法以编程方式在解决方案资源管理器中隐藏项目?,c#,.net,visual-studio-2010,visual-studio-sdk,C#,.net,Visual Studio 2010,Visual Studio Sdk,我正在为VisualStudio2010开发一个扩展,我试图弄清楚如何在解决方案资源管理器(即UIHierarchy)中隐藏项目,而不将其从基础解决方案中删除。我一直在寻找,并找到了一些线索,但我只是不知道足够把它放在一起 从我收集到的信息来看,VisualStudio甚至不会创建一个UIHierarchy实例,除非该项可见(即,树已扩展到它),因此我认为,如果我希望某个项消失,我应该能够简单地从树中删除该实例 我的第一个问题是,我的假设正确吗? 假设答案是肯定的,那么我有以下代码(简化后用于此

我正在为VisualStudio2010开发一个扩展,我试图弄清楚如何在解决方案资源管理器(即
UIHierarchy
)中隐藏项目,而不将其从基础解决方案中删除。我一直在寻找,并找到了一些线索,但我只是不知道足够把它放在一起

从我收集到的信息来看,VisualStudio甚至不会创建一个
UIHierarchy
实例,除非该项可见(即,树已扩展到它),因此我认为,如果我希望某个项消失,我应该能够简单地从树中删除该实例

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

假设答案是肯定的,那么我有以下代码(简化后用于此帖子):

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

有人知道有比微软(IMHO)文档更好的参考资料吗?以前有人试过这样做吗?我该怎么做


谢谢

我不确定它是否适用于项目节点。对于文件节点,有一个VSHPROPID\u IsNonMemberItem层次结构属性。看,还有

至于更好的文档,我想你会在MSDN VSX论坛上找到一些有用的信息。此外,您还可以寻找基于MPF的开源软件包(有一些可用的产品),并了解它们是如何实现这些技巧的;)该死的,看来我不能做我想做的事了。为项目上的文件节点设置标志会引发各种错误。无论如何,谢谢你的帮助!
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;
}