Share via


Cómo: Obtener referencias para los objetos DTE y DTE2

En el ensamblado EnvDTE, el objeto DTE representa el entorno de desarrollo integrado (IDE) de Visual Studio y es el objeto de máximo nivel en la jerarquía del modelo de automatización.Todas las aplicaciones de automatización deben tener una referencia a este objeto para obtener acceso al modelo de automatización básico.Lo mismo sucede con Visual Studio.

Sin embargo, la adición del ensamblado EnvDTE80 proporciona un objeto de nivel superior de reemplazo denominado DTE2, que sustituye al objeto DTE.Ambos objetos actúan y se programan de forma similar, pero DTE2 contiene nuevas funcionalidades y hospeda varios objetos y colecciones nuevos y actualizados.

Como resultado, al crear nuevas aplicaciones de automatización y complementos, se deben crear referencias a ambos objetos.El nuevo objeto DTE2 proporciona acceso a las nuevas funcionalidades, mientras que el objeto DTE proporciona acceso al resto de las funcionalidades de automatización básica.Siempre que sea posible, se deben utilizar los nuevos objetos y colecciones de DTE2, en lugar de los objetos y colecciones de DTE.

Los siguientes procedimientos muestran cómo obtener una referencia al objeto DTE2.(El mismo procedimiento se aplica al objeto DTE). Antes de agregar referencias a los objetos, se deben agregar a los ensamblados adecuados y a la biblioteca de tipos.Para obtener más información, vea Cómo: Agregar referencias a los espacios de nombres de automatización.

El identificador de programación (ProgID) que se utilizará para Visual Studio 2012 es VisualStudio.DTE.11.0.Después puede convertir el objeto devuelto en una interfaz DTE2.

Cuando se llama a las propiedades, métodos y eventos de DTE2, éstos devuelven los tipos DTE.Por ejemplo, Solution devuelve un objeto Solution, no un objeto Solution2 como cabría esperar.Por este motivo, cuando se utilizan los miembros DTE2 u otros miembros de tipos, se deben convertir explícitamente.Esto se hizo con toda intención por varias razones.La primera es promover la coherencia y reducir la confusión.El ensamblado EnvDTE80.dl devuelve sistemáticamente la misma interfaz para todas las propiedades de DTE2.Si se devuelve la última versión de la interfaz sería confuso.Por ejemplo, si una versión futura de Visual Studio tiene un tipo DTE3, algunas interfaces podrían devolver DTE, otras DTE2 y otras DTE3.Además, representaría problemas de interoperabilidad COM, porque las interfaces "2" de EnvDTE80 se derivan de las interfaces EnvDTE.Por ejemplo, Window2 se deriva de Window.Si una propiedad DTE se agregara a Window2, ocultaría la propiedad Windows y no funcionaría correctamente con aplicaciones COM.

[!NOTA]

Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valores de configuración o de edición activos.Estos procedimientos se han desarrollado con la Configuración de desarrollo general activa.Para cambiar la configuración, elija la opción Importar y exportarconfiguraciones del menú Herramientas.Para obtener más información, vea Valores de configuración de Visual Studio.

Para hacer referencia al objeto DTE2 en Visual Basic y C#

  • En el código, agregue lo siguiente:

    ' Get an instance of the currently running Visual Studio IDE.
    Dim DTE2 as EnvDTE80.DTE2
    DTE2 = System.Runtime.InteropServices.Marshal. _
    GetActiveObject("VisualStudio.DTE.11.0")
    
    // Get an instance of the currently running Visual Studio IDE.
    EnvDTE80.DTE2 dte2;
    dte2 = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.
    GetActiveObject("VisualStudio.DTE.11.0");
    

Para hacer referencia al objeto DTE o DTE2 en Visual C++ (ATL)

  • En el código, escriba lo siguiente:

    CComPtr<EnvDTE::_DTE> m_pDTE;
    CComPtr<EnvDTE80::DTE2> m_pDTE2;
    CLSID clsid;
    CLSID clsid2;
    CLSIDFromProgID(L"VisualStudio.DTE.11.0",&clsid);
    CLSIDFromProgID(L"VisualStudio.DTE.11.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;
    

Vea también

Tareas

Cómo: Agregar referencias a los espacios de nombres de automatización

Cómo: Controlar complementos con el Administrador de complementos

Conceptos

Adjuntar elementos a instancias concretas de IDE

Registro de complementos

Gráfico del modelo de objetos de automatización

Otros recursos

Crear complementos y asistentes