Condividi tramite


Procedura: ottenere riferimenti agli oggetti DTE e DTE2

Aggiornamento: novembre 2007

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 2005.

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 EnvDTE, EnvDTE80 ed EnvDTE90.

L'identificatore a livello di codice (ProgID, programmatic identifier) da utilizzare è VisualStudio.DTE.8.0. In seguito sarà possibile eseguire il cast dell'oggetto restituito su 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 restituisce in modo coerente la stessa interfaccia per tutte le proprietà dell'oggetto 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:

Le finestre di dialogo e i comandi di menu visualizzati potrebbero non corrispondere a quelli descritti nella Guida in linea in quanto dipendono dall'edizione o dalle impostazioni attive. Queste routine sono state sviluppate con le Impostazioni generali per lo sviluppo attive. Per modificare le impostazioni, scegliere Importa/EsportaImpostazioni dal menu Strumenti. Per ulteriori informazioni, vedere Impostazioni di Visual Studio.

Per aggiungere un riferimento all'oggetto DTE2 in Visual Basic

  • Nel codice aggiungere quanto riportato di seguito:

    ' Create a new instance of Visual Studio.
    Dim DTE2 As Object
    DTE2 = Microsoft.VisualBasic.Interaction.CreateObject _
    ("VisualStudio.DTE.8.0")
    

    oppure

    ' Get an instance of the currently running Visual Studio IDE.
    Dim DTE2 as EnvDTE80.DTE2
    DTE2 = System.Runtime.InteropServices.Marshal. _
    GetActiveObject("VisualStudio.DTE2")
    
  • 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 EnvDTE80.DTE2
    DTE2 = System.Runtime.InteropServices.Marshal.GetActiveObject_
    ("VisualStudio.DTE2")
    MacrosDTE2 = DTE2.MacrosIDE
    

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

  • Nel codice aggiungere quanto riportato di seguito:

    // Create a new instance of Visual Studio.
    EnvDTE80.DTE2 myDTE2;
    myDTE2 = (EnvDTE80.DTE2)Microsoft.VisualBasic.Interaction.
    CreateObject("VisualStudio.DTE.8.0", "");
    

    oppure

    // Get an instance of the currently running Visual Studio IDE.
    EnvDTE80.DTE2 dte2;
    dte2 = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.
    GetActiveObject("VisualStudio.DTE.8.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.
    EnvDTE80.DTE2 dte2;
    EnvDTE80.DTE2 MacrosDTE2;
    dte2 = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.
    GetActiveObject("VisualStudio.DTE.8.0");
    MacrosDTE2 = 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;
    // The 7.1 reference works only if you have Visual Studio .NET 2003 // installed.
    HRESULT hr = m_pDTE.CoCreateInstance("VisualStudio.DTE.7.1", 0, 
    CLSCTX_ALL); // Create a new instance of Visual Studio 
    HRESULT hr2 = m_pDTE2.CoCreateInstance("VisualStudio.DTE.8.0", 0, 
    CLSCTX_ALL); // Create a new instance of Visual Studio.
    

    oppure

    CComPtr<EnvDTE::_DTE> m_pDTE;
    CComPtr<EnvDTE80::_DTE2> m_pDTE2;
    CLSID clsid;
    CLSID clsid2;
    // The 7.1 reference works only if you have Visual Studio .NET 2003 // installed.
    CLSIDFromProgID(L"VisualStudio.DTE.7.1",&clsid);
    CLSIDFromProgID(L"VisualStudio.DTE.8.0",&clsid2);
    CComPtr<IUnknown> punk;
    CComPtr<IUnknown> punk2;
    // Get a running instance of Visual Studio.
    // The clsid reference works only if you have Visual Studio .NET 
    // 2003 installed.
    HRESULT hr = GetActiveObject(clsid,NULL,&punk);
    HRESULT 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 runnig Macros IDE.
    CComPtr<EnvDTE80::_DTE2> m_pDTE2;
    CComPtr<EnvDTE80::_DTE2> m_pMacrosIDE;
    CLSID clsid;
    CLSIDFromProgID(L"VisualStudio.DTE.8.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 EnvDTE, EnvDTE80 ed EnvDTE90

Procedura: controllare i componenti aggiuntivi con Gestione componenti aggiuntivi

Concetti

Collegamento a istanze specifiche dell'IDE

Registrazione di un componente aggiuntivo

Grafico del modello oggetto di automazione

Altre risorse

Creazione di componenti aggiuntivi e di procedure guidate