2012-03-30 3 views
0

Ich arbeite an einer Erweiterung für Visual Studio 2010, und ich versuche herauszufinden, wie Sie ein Projekt im Projektmappen-Explorer (UIHierarchy) ausblenden, ohne es aus der zugrunde liegenden Lösung zu entfernen. Ich habe gesucht und einige Hinweise gefunden, aber ich weiß einfach nicht genug, um alles zusammen zu stellen.Gibt es eine Möglichkeit, ein Projekt im Projektmappen-Explorer programmatisch auszublenden?

Von dem, was ich sammeln konnte, erstellt Visual Studio nicht einmal eine UIHierarchy Instanz, es sei denn, das Element ist sichtbar (dh der Baum wurde erweitert), also dachte ich mir, wenn ich ein Element wollte Geh weg, ich sollte die Instanz einfach aus dem Baum entfernen können.

Meine erste Frage ist, ist meine Annahme richtig?

die Antwort Unter der Annahme, ja ist, dann habe ich den folgenden Code (für diesen Beitrag vereinfacht):

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

Offensichtlich ist, dass dies noch nichts tun, weil ich völlig stecken bin. Ich vermute, dass der Code rekursiv werden muss (um Projekte in Ordnern usw. zu behandeln), aber im Moment mache ich mir nur Gedanken über den einfachen Fall, in dem alle Projekte direkt unterhalb der Lösung enthalten sind.

Kennt jemand besseres Referenzmaterial als die Dokumentation von Microsoft (IMHO deficient)? Hat jemand das schon mal versucht? Wie mache ich das?

Danke!

+1

für bessere Dokumentation - Ich denke, Sie finden einige hilfreiche Informationen in MSDN VSX Forum. Außerdem könntest du nach MPF-basierten Open-Source-Paketen suchen (es gibt einige verfügbare Produkte) und lernen, wie sie die Tricks gemacht haben;) –

Antwort

1

Ich bin nicht sicher, ob es für Projektknoten möglich ist. Wie bei den Dateiknoten gibt es eine Hierarchieeigenschaft VSHPROPID_IsNonMemberItem. Schauen Sie sich auch this thread und this one an.

+0

Dang, es fängt an zu schauen, dass ich nicht tun kann, was ich versuche zu tun. Wenn Sie die Flags für Dateiknoten in einem Projekt festlegen, werden alle Arten von Fehlern ausgegeben. Danke trotzdem für die Hilfe! –

Verwandte Themen