Condividi tramite


Progettazione di sottotipi di progetto

I sottotipi di progetto let Vspackage estendere i progetti basati su Microsoft Build Engine (MSBuild). L'utilizzo di aggregazione consente di riutilizzare la maggior parte del sistema del progetto gestito principale implementato in Visual Studio tuttavia ancora personalizzare il comportamento per un determinato scenario.

I seguenti argomenti sono descritti in dettaglio la progettazione di base e l'implementazione di sottotipi di progetto:

  • Progettazione del sottotipo di progetto.

  • aggregazione a più livelli.

  • Interfacce di supporto.

Progettazione del sottotipo di progetto

L'inizializzazione di un sottotipo di progetto viene ottenuta mediante l'aggregazione IVsHierarchy e gli obiettivi principali di IVsProject . Questo aggregato consente a un sottotipo di progetto per eseguire l'override o aumentare la maggior parte delle funzionalità del progetto di base. I sottotipi di progetto hanno la prima possibilità di gestire le proprietà utilizzando IVsHierarchy, i controlli utilizzando IOleCommandTarget e IVsUIHierarchye la gestione degli elementi di progetto utilizzando IVsProject3. I sottotipi di progetto possono anche essere estesa:

  • Oggetti di configurazione del progetto.

  • oggetti dipendenti dalla configurazione.

  • oggetti di esplorazione dell'Configurazione-indipendente.

  • Proiettare gli oggetti di automazione.

  • Raccolte di proprietà di automazione del progetto.

Per ulteriori informazioni sull'estensibilità dai sottotipi di progetto, vedere Metodi e proprietà estese dai sottotipi di progetto.

file di criteri

L'ambiente di Visual Studiofornisce un esempio di estensione del sistema di progetto di base con un sottotipo di progetto nella relativa implementazione file di criteri. Un file di criteri consente formazione dell' ambiente di Visual Studiodelle funzionalità che includono Esplora soluzioni, nella finestra di dialogo aggiungere il progetto , la finestra di dialogo di Aggiungi nuovo elemento e la finestra di dialogo Proprietà . Il sottotipo di criteri esegue l'override di e migliora le funzionalità con IVsFilterAddProjectItemDlg, IOleCommandTarget e le implementazioni di IVsUIHierarchy .

meccanismo di aggregazione

Il meccanismo di aggregazione di sottotipo del progetto dell'ambiente supporta livelli di aggregazione più, consentendo pertanto a un sottotipo avanzato da implementare per ulteriori condimento un progetto condito. Inoltre, gli oggetti supporto di un sottotipo di progetto, come IVsProjectFlavorCfg, sono progettati per consentire più livelli di sovrapposizione. In conformità con i vincoli le regole di aggregazione COM e COM, sottotipi di progetto e i progetti di base devono essere implementati in modo cooperativo per abilitare il sottotipo interno o il progetto di base correttamente partecipare alle chiamate al metodo dell'autorizzazione e conteggi dei riferimenti gestire. Ovvero il progetto su essere aggregatoe deve essere pianificata per supportare aggregato.

Nella figura seguente viene illustrata una rappresentazione schematica di un aggregato a più livelli sottotipo di progetto.

Sottotipo multilivello di progetto

Rappresentazione grafica dei progetti multilivello Visual Studio

Un aggregato a più livelli sottotipo di progetto è costituito da tre livelli, un progetto di base, che verranno aggregati da un sottotipo di progetto, quindi ulteriormente aggregato da un sottotipo avanzato di progetto. È incentrata sulla figura di alcune interfacce di supporto disponibili come una parte dell'architettura di sottotipo di progetto Visual Studio .

meccanismi di distribuzione

Tra molte delle funzionalità di base del sistema del progetto avanzate da un sottotipo di progetto sono meccanismi di distribuzione. Un sottotipo di progetto influisce sui meccanismi di distribuzione mediante l'implementazione delle interfacce di configurazione (come IVsDeployableProjectCfg e IVsBuildableProjectCfg) recuperate chiamando QueryInterface su IVsProjectCfgProvider. In uno scenario in cui sia il sottotipo di progetto che il sottotipo avanzato di progetto aggiunte le implementazioni diverse di configurazione, le chiamate di base QueryInterface di progetto in IUnknownavanzato per il sottotipo di progetto. Se il sottotipo interno di progetto contiene l'implementazione di configurazione cui il progetto di base viene richiesto, i delegati avanzati sottotipo di progetto all'implementazione fornivano il tipo interno del progetto. Ad esempio un meccanismo per mantenere lo stato da un livello di aggregazione a un altro, tutti i livelli di sottotipi di progetto implementa IPersistXMLFragment per rendere persistenti i dati XML correlati non compilazione nei file di progetto. Per ulteriori informazioni, vedere Rendere persistenti i dati nel file di progetto MSBuild. IInternalExtenderProvider viene implementato come meccanismo per recuperare le estensioni di automazione dai sottotipi di progetto.

I seguenti stati attivi mostrato nell'implementazione delle estensioni di automazione, l'oggetto di esplorazione di configurazione del progetto in particolare, utilizzato dai sottotipi di progetto per estendere il sistema di progetto di base.

Proiettare l'Extender di automazione del sottotipo.

Rappresentazione dell'Extender automatico delle caratteristiche dei progetti VS

I sottotipi di progetto possono ulteriormente estendere il sistema di progetto di base estendendo il modello a oggetti di automazione. Questi sono definiti come parte dell'oggetto ActiveX DTE e vengono utilizzati per estendere l'oggetto del progetto, l'oggetto di ProjectItem e l'oggetto di Configuration . Per ulteriori informazioni, vedere Estensione del modello a oggetti del progetto di base.

aggregazione a più livelli

Un'implementazione di sottotipo di progetto che esegue il wrapping di un sottotipo di livello più basso di progetto deve essere programmato in modo cooperativo per consentire al sottotipo interno del progetto funzioni correttamente. Un elenco delle responsabilità di programmazione include:

  • L'implementazione di IPersistXMLFragment del sottotipo di progetto che esegue il wrapping del sottotipo interno venga delegati IPersistXMLFragment l'implementazione del sottotipo interno del progetto sia per Load che i metodi di Save .

  • L'implementazione di IInternalExtenderProvider del sottotipo di progetto del wrapper deve delegare quello del sottotipo interno del progetto. In particolare, l'implementazione delle necessità di GetExtenderNames di ottenere la serie di nomi dal sottotipo interno del progetto e quindi di concatenare stringhe che desidera aggiungere come estensioni.

  • L'implementazione di IVsProjectCfgProvider di un sottotipo di progetto del wrapper deve creare un'istanza dell'oggetto di IVsProjectFlavorCfg del sottotipo interno del progetto e utilizzarla come delegato privato, poiché solo l'oggetto di base della configurazione del progetto direttamente sa che l'oggetto di configurazione sottotipo di progetto del wrapper esistente. Il sottotipo esterno di progetto può inizialmente scegliere le interfacce di configurazione desidera gestire direttamente e quindi delegate dal resto dell'implementazione interna del sottotipo di progetto di get_CfgType.

Interfacce di supporto

Il progetto di base delega le chiamate le interfacce di supporto aggiunte da un sottotipo di progetto, per estendere vari aspetti dell'implementazione. Sono inclusi gli oggetti estensione di configurazione del progetto e diversi oggetti del Visualizzatore proprietà. Queste interfacce vengono recuperate chiamando QueryInterface su punkOuter (un puntatore a IUnknown) dell'aggregatore più esterno sottotipo di progetto.

Interfaccia

proiettare il sottotipo

IVsProjectFlavorCfg

Consente il sottotipo di progetto a:

  • Fornire un'implementazione di IVsDeployableProjectCfg.

  • Controllareavvio del debugger in modo che il sottotipo di progetto fornisce la propria implementazione di IVsDebuggableProjectCfg.

  • Disabilitare la valutazione di espressioni in fase di progettazione in modo appropriato gestendo il caso di DBGLAUNCH_DesignTimeExprEval nell'implementazione di QueryDebugLaunch.

IInternalExtenderProvider

Consente il sottotipo di progetto a:

  • Estendere VSHPROPID_BrowseObject del progetto aggiungere o rimuovere le proprietà indipendenti di configurazione del progetto.

  • Estendere l'oggetto ActiveX di progetto (VSHPROPID_ExtObject) del progetto.

I valori delle proprietà sopra derivano dall'enumerazione di __VSHPROPID2 .

IVsCfgBrowseObject

Consente il sottotipo di progetto al mapping dell'oggetto di IVsCfg fornito l'oggetto di esplorazione di configurazione del progetto.

IVsBrowseObject

Consente il sottotipo di progetto al mapping a IVsHierarchy l'oggetto o di VSITEMID , visto l'oggetto di esplorazione di configurazione del progetto.

IPersistXMLFragment

Consente al sottotipo di progetto permanga i dati strutturati XML arbitrari nel file di progetto (con estensione csproj o vbproj). questi dati non sono visibili a MSBuild.

IVsBuildPropertyStorage

Consente il sottotipo di progetto a:

  • Aggiungere nuove proprietà MSBuild rendere persistenti.

  • Rimuovere le proprietà non necessari da MSBuild.

  • Query per un valore corrente di una proprietà MSBuild.

  • Modificare il valore corrente di una proprietà MSBuild.

Vedere anche

Riferimenti

__VSPROPID

__VSPROPID2