0

私は Visual Studio 2010 の拡張機能に取り組んでおりUIHierarchy、基になるソリューションからプロジェクトを削除せずに、ソリューション エクスプローラー ( ) でプロジェクトを非表示にする方法を見つけようとしています。私は探していて、いくつかの手がかりを見つけましたが、すべてをまとめるのに十分な知識がありません.

私が収集できたことからUIHierarchy、アイテムが表示されていない限り (つまり、ツリーが展開されていない限り)、Visual Studio はインスタンスを作成することさえしないので、アイテムを削除したい場合は、インスタンスを作成する必要があると考えました。ツリーからインスタンスを簡単に削除できます。

私の最初の質問は、私の仮定は正しいですか?

答えが「はい」であると仮定すると、次のコードが得られます (この投稿用に簡略化されています)。

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;
}

私は完全に立ち往生しているので、明らかに、これはまだ何もしません。コードは (フォルダーに含まれるプロジェクトを処理するためなどに) 再帰的になる必要があると思いますが、今のところ、すべてのプロジェクトがソリューションの直下に含まれているという単純なケースだけが心配です。

Microsoft の (IMHO 不足の) ドキュメントよりも優れた参考資料を知っている人はいますか? 誰もこれをやろうとしたことがありますか?どうすればいいですか?

ありがとう!

4

1 に答える 1

1

プロジェクトノードで可能かどうかはわかりません。ファイル ノードに関しては、VSHPROPID_IsNonMemberItem 階層プロパティがあります。このスレッドこれも見てください。

于 2012-03-31T11:10:04.360 に答える