Überlegungen zum Entladen und das erneute Laden von geschachtelten Projekten
Bei geschachtelten Projekttypen implementieren, müssen Sie zusätzliche Schritte ausführen, wenn Sie die Projekte entladen und erneut geladen werden. Um Projektmappen Listener Ereignisse korrekt zu benachrichtigen, müssen Sie die OnBeforeUnloadProject und OnAfterLoadProject ordnungsgemäß Ereignisse auslösen.
Ein Grund, den Sie diese Ereignisse auslösen müssen auf diese Weise, dass Sie Quellcodeverwaltung (SCC) die Elemente aus den Server nicht löschen und anschließend wieder hinzufügen möchten, ein neues als bei einem Get Ausführung von SCC vorhanden ist. In diesem Fall würde eine neue Datei aus SCC out geladen, und Sie müssen alle Dateien entladen und neu laden, falls sie ungleich sind. SCC ruft ReloadIteman. Die Implementierung dieses Aufrufs wird das Projekt erneut zu löschen und neu zu erstellen, indem IVsFireSolutionEvents implementiert, um OnBeforeUnloadProject und OnAfterLoadProjectaufzurufen. Wenn Sie diese Implementierung ausführen, ist das SCC informiert, dass das Projekt vorübergehend gelöscht und erneut hinzugefügt wurde. Daher können die SCC nicht mit dem Projekt ausführen, als ob das Projekt tatsächlich vom Server gelöscht wurde und erneut hinzugefügt.
Projekte erneut geladen werden
Um das erneute Laden von geschachtelten Projekte zu unterstützen, implementieren Sie die ReloadItem-Methode. In der Implementierung von ReloadItem, schließen Sie die geschachtelten Projekte erstellen und sie anschließend neu.
In der Regel wird ausgelöst, wenn ein Projekt erneut geladen wird, löst die IDE das OnBeforeUnloadProject und die M:Microsoft.VisualStudio.Shell.Interop.IVsSolutionEvents3.OnAfterLoadProject(Microsoft.VisualStudio.Shell.Interop.IVsHierarchy,Microsoft.VisualStudio.Shell.Interop.IVsHierarchy) von Ereignissen aus. Für geschachtelte Projekte, die gelöscht und erneut geladen werden, den Prozess initiiert das übergeordnete Projekt, nicht die IDE. Da das übergeordnete Projekt nicht Ereignisse auslöst und Projektmappen der IDE keine Informationen über die Initialisierung des Prozesses verfügt, werden die Ereignisse nicht ausgelöst.
Um diesen Prozess zu behandeln, ruft das übergeordnete Projekt QueryInterface auf der IVsFireSolutionEvents-Schnittstelle aus der IVsSolution-Schnittstelle an. IVsFireSolutionEvents verfügt über Funktionen, die von der IDE anweisen, das OnBeforeUnloadProject-Ereignis auszulösen, um das geschachtelte Projekt zu entladen, und anschließend wird das OnAfterLoadProject-Ereignis aus, um das gleiche Projekt erneut zu laden.