Compartir a través de


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

Nota

En Visual Studio 2013, los complementos están desusados.Se recomienda actualizar los complementos a las extensiones de VSPackage.Para obtener más información, vea Preguntas más frecuentes: Convertir complementos en extensiones de VSPackage.

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. Una aplicación de automatización debe tener una referencia a este objeto para obtener acceso al modelo de automatización básico.

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

Cuando se crean nuevas aplicaciones de automatización, se recomienda crear referencias a ambos objetos, al objeto DTE2 para proporcionar acceso a las nuevas funcionalidades, y al objeto DTE para proporcionar acceso al resto de la funcionalidad básica. También se recomienda usar siempre que sea posible los nuevos objetos y colecciones de DTE2 en lugar de los de DTE.

Los pasos siguientes muestran cómo obtener una referencia al objeto DTE2. (El mismo procedimiento se aplica al objeto DTE). Antes de agregar una referencia a un objeto, se deben agregar referencias al ensamblado y a la biblioteca de tipos adecuados. 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 hay que usar en Visual Studio 2013 es VisualStudio.DTE.12.0. Después puede convertir el objeto devuelto en una interfaz DTE2.

Cuando se llama a las propiedades, métodos y eventos de DTE2, estos devuelven los tipos DTE. Por ejemplo, Solution devuelve un objeto Solution, no un objeto Solution2 como cabría esperar. Por este motivo, cuando se usan los miembros DTE2 u otros miembros de tipos, estos se deben convertir explícitamente. Este diseño fomenta la coherencia y reduce 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 tuviera un tipo DTE3, algunas interfaces podrían devolver DTE, otras DTE2 y otras DTE3. Además, esto podría crear problemas de interoperabilidad COM, porque las interfaces "2" de EnvDTE80 se derivan de las interfaces EnvDTE. Por ejemplo, Window2 se deriva de Window; si se agregara una propiedad DTE a Window2, se ocultaría la propiedad Windows y no funcionaría correctamente con aplicaciones COM.

Nota

Es posible que su equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio en las siguientes instrucciones.La edición de Visual Studio que tenga y la configuración que esté usando determinan estos elementos.Para obtener más información, vea Personalizar la configuración de desarrollo en Visual Studio.

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

  • En el código, agregue esto:

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

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

  • En el código, agregue esto:

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