Freigeben über


Gewusst wie: Implementieren Sie geschachtelte Projekte

Wenn Sie einen geschachtelten Projekttyp erstellen, gibt es einige zusätzliche Schritte, die implementiert werden müssen. Ein übergeordnetes Projekt übernimmt ein einiger der gleichen Projektmappe, die die Verantwortung für die geschachtelten (untergeordnete) Projekte aufweist. Das Projekt ist ein Container für Elemente, die Projekte in einer Projektmappe ähneln. Insbesondere gibt es einige Ereignisse, die von der Projektmappe enthaltenen Projekte und von den Elementen ausgelöst werden müssen, die Hierarchie geschachtelter Projekten zu erstellen. Diese Ereignisse werden im folgenden Verfahren zum Erstellen von geschachtelten Projekten beschrieben.

Um geschachtelte Projekte erstellen

  1. Die integrierte Entwicklungsumgebung (IDE) lädt die Elemente und Projektdatei- Informationen zum Starten des Projekts, indem sie die IVsProjectFactory-Schnittstelle aufruft. Das übergeordnete Projekt der Projektmappe wird erstellt und dem Projektmappen-Explorer hinzugefügt.

    Hinweis

    An diesem Punkt ist es zu einem frühen Zeitpunkt im Prozess, dessen Elemente das Projekt geschachtelte Projekt erstellt, da das übergeordnete Projekt erstellt werden muss, bevor die untergeordneten Projekte erstellt werden können.Nach dieser Sequenz kann das übergeordnete Projekt Einstellungen auf untergeordnete Projekte anwenden und die untergeordneten Projekte können Informationen aus den Elementen Projekten nach Bedarf abrufen.Diese Sequenz ist, wenn sie von Clients wie die Quellcodeverwaltung (SCC) und der Projektmappen-Explorer nicht erforderlich ist.

    Das übergeordnete Projekt muss von der IDE OpenChildren-Methode aufgerufen werden, auf die gewartet werden soll, bevor sein, geschachtelte (untergeordnete) Projekt oder Projekte erstellen kann.

  2. Die IDE ruft QueryInterface des übergeordneten Projekts für IVsParentProjectan. Wenn dieser Aufruf erfolgreich ausgeführt wird, wird die IDE die OpenChildren-Methode des übergeordneten Elements an, um alle geschachtelten Projekte für das übergeordnete Projekt zu öffnen.

  3. Das übergeordnete Projekt wird die FireOnBeforeOpeningChildren-Methode auf, um einen Listener zu benachrichtigen, dass geschachtelte Projekte im Begriff sind erstellt werden. SCC auf diese Ereignisse überwacht, z. B. zu wissen, wenn die Schritte im Projektmappen- und des Builds Projekt in der Reihenfolge auftreten. Wenn die Testschritte gestört auftreten, wird die Projektmappe nicht mit Quellcodeverwaltung ordnungsgemäß registriert werden.

  4. Das übergeordnete Projekt wird AddVirtualProject-Methode oder die AddVirtualProjectEx-Methode für jeden seiner untergeordneten Projekte an.

    Führen Sie zur __VSADDVPFLAGSAddVirtualProject-Methode usw. anzugeben, dass das virtuelle (geschachtelte) Projekt im Fenster Projekt hinzugefügt werden soll, vom Build ausgeschlossen wurde der Quellcodeverwaltung hinzugefügt. VSADDVPFLAGS können Sie die Sichtbarkeit des geschachtelten Projekts gesteuert und angeben, welche Funktionen zugeordnet ist.

    Wenn Sie ein bereits vorhandener untergeordnetes Projekt erneut laden, das eine Projekt-GUID verfügt, die in der übergeordneten Projektdatei des Projekts gespeichert wird, ruft das übergeordnete Projekt AddVirtualProjectExan. Der einzige Unterschied zwischen AddVirtualProject und AddVirtualProjectEX besteht darin, dass AddVirtualProjectEX einen Parameter verfügt, sodass die übergeordneten Projekts zu ermöglichen, eine pro Instanz guidProjectID anzugeben, dass das untergeordnete Projekt GetProjectOfGuid und GetProjectOfProjref aktiviert, um ordnungsgemäß zu funktionieren.

    Wenn kein GUID gibt an, wie verfügbar, wenn Sie ein neues geschachteltes Projekt hinzufügen, erstellt das Projekt für die Projektmappe ein, wenn sie zum übergeordneten Element hinzugefügt wird. Es liegt in der Verantwortung des übergeordneten Projekts, diese Projekt-GUID in der Projektdatei beizubehalten. Wenn Sie ein geschachteltes Projekt löschen, kann die GUID für dieses Projekt auch gelöscht werden.

  5. Die IDE ruft die M:Microsoft.VisualStudio.Shell.Interop.IVsParentProject.OpenChildren-Methode für jedes untergeordnete Projekt des übergeordneten Projekts an.

    Das übergeordnete Projekt muss IVsParentProject implementieren, wenn Sie Projekte schachteln möchten. Aber das übergeordnete Projekt wird nie QueryInterface für IVsParentProject an, auch wenn diese Elemente Projekte darunter verfügt. Die Projektmappe behandelt den Aufruf von IVsParentProject und bei der Implementierung ruft OpenChildren auf, um die geschachtelten Projekte zu erstellen. AddVirtualProjectEX wird immer vom OpenChildrenaufgerufen. Es sollte nie durch das übergeordnete Projekt aufgerufen werden, die Hierarchien von Builds in der Reihenfolge beizubehalten.

  6. Die IDE ruft die OnAfterOpenProject-Methode für das untergeordnete Projekt an.

  7. Das übergeordnete Projekt wird die FireOnAfterOpeningChildren-Methode auf, um einen Listener zu benachrichtigen, dass die untergeordneten Projekte für das übergeordnete Element erstellt wurden.

  8. Die IDE ruft die FireOnAfterOpenProject-Methode auf dem übergeordneten Projekts, nachdem alle an das untergeordnete Projekte geöffnet wurden.

    Wenn sie nicht bereits vorhanden ist, erstellt das übergeordnete Projekt eine GUID für jedes geschachtelte Projekt, indem CoCreateGuidaufruft.

    Hinweis

    CoCreateGuid ist mit der Bezeichnung COM-APIs, wenn eine GUID erstellt werden soll.Weitere Informationen finden Sie unter CoCreateGuid und GUID in der MSDN Library.

    Das Elemente in seiner GUID dieses speichert Projekt das nächste Mal abgerufen werden sollen, die Projektdatei im IDE geöffnet ist. Siehe Schritt 4 für weitere Informationen bezüglich der Aufruf von AddVirtualProjectEX , um guidProjectID für das untergeordnete Projekt abzurufen.

  9. Die GetProperty-Methode wird dann für das übergeordnete ItemID aufgerufen, das vereinbarungsgemäß Sie dem geschachtelten Projekt delegieren. GetProperty ruft die Eigenschaften des Knotens ab, der ein Projekt schachtelt, in dem Sie delegieren möchten, wenn es sich um dem übergeordneten Element aufgerufen wird.

    Da übergeordnete und untergeordnete Projekte programmgesteuert instanziiert werden, können Sie Eigenschaften für geschachtelte Projekten an diesem Punkt festlegen.

    Hinweis

    Rufen Sie nicht nur die Kontextinformationen vom geschachtelten Projekt. Sie können jedoch auch fragen, ob das übergeordnete Projekt einen Kontext für dieses Element verfügt, indem VSHPROPID_UserContextüberprüft.Auf diese Weise können Sie zusätzliche Menüoptionen und die dynamische Hilfe Attribute hinzufügen, die geschachtelten einzelnen Projekte spezifisch sind.

  10. Die Hierarchie wird für die Anzeige im Projektmappen-Explorer mit einem Aufruf der GetNestedHierarchy-Methode erstellt.

    Sie führen die Hierarchie der Umgebung von GetNestedHierarchy , um die Hierarchie für die Anzeige im Projektmappen-Explorer zu erstellen. Auf diese Weise wird die Lösung, weiß, dass das Projekt zum Erstellen der Build-Manager vorhanden und verwaltet werden kann, oder es kann Dateien des Projekts ermöglichen, unter Quellcodeverwaltung gestellt werden.

  11. Wenn alle geschachtelten Project1 für Projekte erstellt wurden, wird die Steuerung wieder an die Projektmappe übergeben, und der Prozess wird für Project2 wiederholt.

    Dieser gleichen Prozess zum Erstellen von geschachtelten Projekten tritt für ein untergeordnetes Projekt, das ein untergeordnetes Element verfügt. In diesem Fall wenn BuildProject1, das ein untergeordnetes Element von Project1 ist, untergeordnete Projekte hatte, werden sie vor und nach BuildProject1 Project2 erstellt. Der Prozess ist rekursiv und die Hierarchie wird von oben nach unten erstellt.

    Wenn ein geschachteltes Projekt geschlossen wird, da der Benutzer die Projektmappe oder das bestimmtes Projekt selbst wurde, wird die andere Methode für IVsParentProject, CloseChildren, aufgerufen. Die Elemente umbruchs Projekt zur RemoveVirtualProject-Methode mit dem von OnBeforeClosingChildren und den OnAfterClosingChildren-Methode, um Projektmappen Listener Ereignisse zu benachrichtigen, dass die geschachtelten Projekte geschlossen werden.

Im folgenden Thema abkommen mit einigen anderen Konzepten, geschachtelte beachten sollten, wenn Sie Projekte ausführen:

Überlegungen zum Entladen und das erneute Laden von geschachtelten Projekten

Assistenten-Unterstützung für geschachtelte Projekte

Implementieren von Projekten für geschachtelte Befehls-Behandlung

Das Filtern von Projekten für geschachtelte AddItem-Dialogfeld

Siehe auch

Konzepte

Elemente in den Dialogfeldern Neues Element hinzufügen

Registrieren von Projekt- und Elementvorlagen

Prüfliste: Erstellen neuer Projekttypen

Kontextparameter

(Assistent. Datei Vsz)