Procedura: Progetti annidati di utilizzo
Quando si crea un tipo di progetto annidato esistono numerosi passaggi aggiuntivi che devono essere implementati. Un progetto padre assume le stesse responsabilità che la soluzione è per i progetti (figlio) annidati. Il progetto padre è un contenitore dei progetti simili a una soluzione. In particolare, esistono numerosi eventi che devono essere generati dalla soluzione e i progetti padre compilare la gerarchia dei progetti annidati. Questi eventi sono descritti nel seguente processo di creazione dei progetti annidati.
Per creare progetti annidati
L'ambiente di sviluppo (IDE) integrato (IDE) carica le informazioni del file di progetto e di avvio del progetto padre chiamando l'interfaccia di IVsProjectFactory . Il progetto padre viene creato e aggiunto alla soluzione.
Nota
In questa fase, è troppo presto nel processo per il progetto padre creare il progetto annidato perché il progetto padre deve essere creato prima che i progetti figlio possono essere creati.Attenendosi a questa sequenza, il progetto padre possibile applicare le impostazioni ai progetti figlio e i progetti figlio possono acquisire le informazioni dei progetti padre se necessari.Questa sequenza viene se è necessaria sui client come controllo del codice sorgente (SCC) e Esplora soluzioni.
Il progetto padre deve attendere il metodo di OpenChildren da chiamare dall'IDE prima di poter creare il proprio progetto o progetti annidati (figlio).
L'ide chiama QueryInterface nel progetto padre per IVsParentProject. Se la chiamata ha esito positivo, l'ide chiama il metodo di OpenChildren padre per aprire tutti progetti annidati per il progetto padre.
Il progetto padre chiama il metodo di FireOnBeforeOpeningChildren per aggiornare i listener che i progetti annidati stanno per essere creati. Lo SCC, ad esempio, ascoltano tali eventi per sapere se i passaggi della soluzione e nel processo di creazione di un progetto si verificano nell'ordine. Se i passaggi seguenti si verificano verificato un errore, la soluzione potrebbe non essere registrata con controllo del codice sorgente correttamente.
Il progetto padre chiama il metodo di AddVirtualProject o il metodo di AddVirtualProjectEx su ciascuno dei relativi progetti figlio.
Passare __VSADDVPFLAGS al metodo di AddVirtualProject per indicare che il progetto (annidato) virtuale deve essere aggiunto nella finestra di progetto, escluso dalla compilazione, aggiunto al controllo del codice sorgente, e così via. VSADDVPFLAGS consente di controllare la visibilità del progetto annidato e indicare che la funzionalità è associata.
Se si ricarica un progetto figlio in precedenza esistente con un GUID del progetto memorizzato nel file del progetto padre, il progetto padre chiama AddVirtualProjectEx. The only difference between AddVirtualProject and AddVirtualProjectEX is that AddVirtualProjectEX has a parameter to enable the parent project to specify a per instance guidProjectID for the child project to enable GetProjectOfGuid and GetProjectOfProjref to function correctly.
Se non c " è GUID disponibile, ad esempio quando si aggiunge un nuovo progetto annidato, la soluzione viene creato uno per il progetto quando viene aggiunto al padre. È responsabilità del progetto padre mantenere il GUID del progetto nel file di progetto. Se si elimina un progetto annidato, il GUID per tale progetto può anche essere eliminati.
L'ide chiama il metodo di M:Microsoft.VisualStudio.Shell.Interop.IVsParentProject.OpenChildren in ogni progetto figlio del progetto padre.
Il progetto padre deve implementare IVsParentProject se si desidera annidare i progetti. Tuttavia il progetto padre non chiama mai QueryInterface per IVsParentProject anche se include progetti padre. La soluzione gestisce la chiamata a IVsParentProject e, se viene distribuita, chiama OpenChildren per creare progetti annidati. AddVirtualProjectEX viene sempre chiamato da OpenChildren. Non deve essere mai chiamato dal progetto padre mantenere gli eventi di creazione della gerarchia in ordine.
L'ide chiama il metodo di OnAfterOpenProject nel progetto figlio.
Il progetto padre chiama il metodo di FireOnAfterOpeningChildren per aggiornare i listener che i progetti figlio per l'elemento padre sono stati creati.
L'ide chiama il metodo di FireOnAfterOpenProject nel progetto padre dopo tutti i progetti figlio sono stati aperti.
Se non ne esiste già, il progetto padre crea un GUID per ogni progetto annidato chiamando CoCreateGuid.
Nota
CoCreateGuid è un'api COM chiamato quando un GUID deve essere creato.Per ulteriori informazioni, vedere CoCreateGuid e i GUID in MSDN Library.
Il progetto padre archivia il GUID nel file di progetto da recuperare la prossima volta che viene aperto nell'IDE di. Vedere il passaggio 4 per ulteriori informazioni sulla chiamata di AddVirtualProjectEX per recuperare guidProjectID per il progetto figlio.
Il metodo di GetProperty viene quindi chiamato per il ID voce padre che per convenzione delegate nel progetto annidato. GetProperty recupera le proprietà del nodo a annidare un progetto in cui si desidera delegare quando viene chiamato il metodo sul padre.
Poiché i progetti padre e figlio viene creata un'istanza a livello di codice, è possibile impostare le proprietà per i progetti annidati in questa fase.
Nota
Non solo si ricevono le informazioni sul contesto dal progetto annidato, ma è anche possibile chiedere se il progetto padre dispone di una qualsiasi contesto per tale elemento di VSHPROPID_UserContext.In tal modo, è possibile aggiungere attributi aggiuntivi e le opzioni di menu della Guida dinamica specifici dei progetti annidati utente.
La gerarchia è compilata per la visualizzazione in Esplora soluzioni con una chiamata al metodo di GetNestedHierarchy .
Passare la gerarchia all'ambiente con GetNestedHierarchy per compilare la gerarchia per la visualizzazione in Esplora soluzioni. In questo modo, la soluzione corrente che il progetto esiste e può essere gestito per compilare dal gestore di compilazione, oppure può consentire i file nel progetto sia inserito nel controllo del codice sorgente.
Quando tutti i progetti annidati per Project1 vengono creati, il controllo viene passato alla soluzione e il processo viene ripetuto per Project2.
Questo stesso processo per creare progetti annidati si verifica per un progetto figlio con un figlio. In questo caso, se BuildProject1, che è un elemento figlio di Project1, era progetti figlio, verranno create dopo BuildProject1 e prima di Project2. Il processo sono ricorsivi e la gerarchia viene compilata dall'alto verso il basso.
Quando un progetto annidato viene chiuso perché l'utente ha chiuso la soluzione o il progetto specifico stessa, l'altro metodo su IVsParentProject, CloseChildren, viene chiamato. The parent project wraps calls to the RemoveVirtualProject method with the OnBeforeClosingChildren and the OnAfterClosingChildren methods to notify listeners to solution events that the nested projects are being closed.
I seguenti argomenti riguardano di diversi altri concetti da considerare quando si distribuiscono progetti annidati:
Considerazioni per scaricare e ricaricare i progetti annidati
Supporto della procedura guidata ai progetti annidati
Implementazione della gestione di comando per i progetti annidati
Filtrare la finestra di dialogo di AddItem per i progetti annidati
Vedere anche
Concetti
Aggiunta di elementi a finestre di dialogo nuove aggiungi elemento
Registrare i modelli di progetto e di elemento