Procedura: ottenere riferimenti agli oggetti DTE e DTE2

Nell'assembly EnvDTE, l'oggetto DTE rappresenta l'ambiente di sviluppo integrato (IDE, Integrated Development Environment) di Visual Studio ed è l'oggetto di livello più elevato nella gerarchia del modello di automazione. Tutte le applicazioni di automazione devono disporre di un riferimento a questo oggetto per ottenere l'accesso al modello di automazione di base. La stessa situazione si verifica anche con Visual Studio.

Tuttavia, l'aggiunta dell'assembly EnvDTE80 offre un oggetto di primo livello sostitutivo denominato DTE2 che sostituisce l'oggetto DTE. Entrambi gli oggetti agiscono e vengono programmati in modo simile, con la differenza che l'oggetto DTE2 contiene nuove funzionalità e una serie di oggetti e insiemi nuovi e aggiornati.

Di conseguenza, quando si creano nuove applicazioni di automazione e nuovi componenti aggiuntivi, è necessario creare riferimenti a entrambi gli oggetti. Il nuovo oggetto DTE2 fornisce l'accesso a nuove funzionalità, mentre l'oggetto DTE fornisce l'accesso alla parte restante della funzionalità di automazione di base. Quando possibile, è preferibile utilizzare i nuovi oggetti e insiemi in DTE2 anziché gli oggetti e insiemi in DTE.

Di seguito viene illustrato come ottenere un riferimento all'oggetto DTE2. (La stessa routine si applica all'oggetto DTE.) Prima di aggiungere riferimenti agli oggetti, è necessario aggiungere riferimenti alla libreria dei tipi e agli assembly appropriati. Per ulteriori informazioni, vedere Procedura: aggiungere riferimenti agli spazi dei nomi di automazione.

L'identificatore a livello di codice (ProgID) da utilizzare è VisualStudio.DTE.10.0. È quindi possibile eseguire il cast dell'oggetto restituito in un'interfaccia DTE2.

Le proprietà, i metodi e gli eventi dell'oggetto DTE2, quando vengono chiamati, restituiscono i tipi DTE. Ad esempio, la proprietà Solution restituisce un oggetto Solution e non un oggetto Solution2 come previsto perché, quando si utilizzano i membri DTE2 o altri membri di tipo, è necessario eseguire su di essi un cast di tipo in modo esplicito. Questa operazione è stata eseguita intenzionalmente per numerose ragioni. La prima è garantire la coerenza e ridurre le possibilità di confusione. L'assembly EnvDTE80.dll restituisce in modo coerente la stessa interfaccia per tutte le proprietà di DTE2. La restituzione della versione più recente dell'interfaccia potrebbe generare confusione. Ad esempio, se in una versione futura di Visual Studio sarà disponibile un tipo DTE3, alcune interfacce potrebbero restituire l'oggetto DTE, altre l'oggetto DTE2 e altre ancora DTE3. Potrebbero inoltre sorgere problemi di interoperabilità COM poiché le interfacce "2" in EnvDTE80 derivano dalle interfacce EnvDTE. L'interfaccia Window2 deriva, ad esempio, dall'interfaccia Window. Se si aggiunge una proprietà DTE all'interfaccia Window2, la proprietà Windows viene nascosta e non può essere utilizzata con le applicazioni COM.

Nota

È possibile che le finestre di dialogo e i comandi di menu visualizzati siano diversi da quelli descritti nella Guida a seconda delle impostazioni attive o dell'edizione del programma. Queste procedure sono state sviluppate con le Impostazioni generali per lo sviluppo attive. Per modificare le impostazioni, scegliere Importa/Esporta Impostazioni dal menu Strumenti. Per ulteriori informazioni, vedere Gestione delle impostazioni.

Per aggiungere un riferimento all'oggetto DTE2 in Visual Basic e C#

  • Nel codice aggiungere quanto riportato di seguito:

    ' Get an instance of the currently running Visual Studio IDE.
    Dim DTE2 as EnvDTE80.DTE2
    DTE2 = System.Runtime.InteropServices.Marshal. _
    GetActiveObject("VisualStudio.DTE.10.0")
    
    // Get an instance of the currently running Visual Studio IDE.
    EnvDTE80.DTE2 dte2;
    dte2 = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.
    GetActiveObject("VisualStudio.DTE.10.0");
    
  • Per aggiungere un riferimento all'oggetto dell'IDE macro, aggiungere nel codice quanto riportato di seguito:

    ' Get an instance of the currently running Macros IDE.
    Dim DTE2 as EnvDTE80.DTE2
    Dim MacrosDTE2 as EnvDTE._DTE
    DTE2 = System.Runtime.InteropServices.Marshal.GetActiveObject_
    ("VisualStudio.DTE2")
    MacrosDTE2 = DTE2.MacrosIDE
    
    // Get an instance of the currently running Macros IDE.
    EnvDTE80.DTE2 dte2;
    EnvDTE.DTE MacrosDTE;
    dte2 = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.
    GetActiveObject("VisualStudio.DTE.10.0");
    MacrosDTE = dte2.MacrosIDE;
    

Per aggiungere un riferimento all'oggetto DTE o DTE2 in Visual C++ (ATL)

  • Nel codice immettere le istruzioni seguenti:

    CComPtr<EnvDTE::_DTE> m_pDTE;
    CComPtr<EnvDTE80::DTE2> m_pDTE2;
    CLSID clsid;
    CLSID clsid2;
    CLSIDFromProgID(L"VisualStudio.DTE.10.0",&clsid);
    CLSIDFromProgID(L"VisualStudio.DTE.10.0",&clsid2);
    
    CComPtr<IUnknown> punk;
    CComPtr<IUnknown> punk2;
    // Get a running instance of Visual Studio.
    HRESULT hr = GetActiveObject(clsid,NULL,&punk);
    hr = GetActiveObject(clsid2,NULL,&punk2);
    m_pDTE = punk;
    m_pDTE2 = punk2;
    
  • Per aggiungere un riferimento all'oggetto dell'IDE macro, aggiungere nel codice quanto riportato di seguito:

    // Get an instance of the currently running Macros IDE.
    CComPtr<EnvDTE80::DTE2> m_pDTE2;
    CComPtr<EnvDTE::_DTE> m_pMacrosIDE;
    CLSID clsid;
    CLSIDFromProgID(L"VisualStudio.DTE.10.0",&clsid);
    CComPtr<IUnknown> punk;
    HRESULT hr = GetActiveObject(clsid,NULL,&punk);
    m_pDTE = punk;
    m_pDTE->get_MacrosIDE((void **)&m_pMacrosIDE);
    

Vedere anche

Attività

Procedura: aggiungere riferimenti agli spazi dei nomi di automazione

Procedura: controllare i componenti aggiuntivi tramite Gestione componenti aggiuntivi

Concetti

Collegamento a istanze specifiche dell'IDE

Registrazione di un componente aggiuntivo

Grafico del modello a oggetti di automazione

Altre risorse

Creazione di componenti aggiuntivi e di procedure guidate