Cómo: Obtener referencias para los objetos DTE y DTE2
Actualización: noviembre 2007
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 2005.
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 aloja 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 EnvDTE, EnvDTE80 y EnvDTE90.
El identificador de programación (ProgID) que se debe utilizar es VisualStudio.DTE.8.0. A continuación, el objeto devuelto se puede convertir 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 fomentar la coherencia y reducir la confusión. El ensamblado EnvDTE80 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 desarrollaron con la Configuración general de desarrollo 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
En el código, agregue lo siguiente:
' Create a new instance of Visual Studio. Dim DTE2 As Object DTE2 = Microsoft.VisualBasic.Interaction.CreateObject _ ("VisualStudio.DTE.8.0")
O bien
' Get an instance of the currently running Visual Studio IDE. Dim DTE2 as EnvDTE80.DTE2 DTE2 = System.Runtime.InteropServices.Marshal. _ GetActiveObject("VisualStudio.DTE2")
Para hacer referencia al objeto IDE de macros, agregue lo siguiente al código:
' 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
Para hacer referencia al objeto DTE2 en Visual C#
En el código, agregue lo siguiente:
// Create a new instance of Visual Studio. EnvDTE80.DTE2 myDTE2; myDTE2 = (EnvDTE80.DTE2)Microsoft.VisualBasic.Interaction. CreateObject("VisualStudio.DTE.8.0", "");
O bien
// 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");
Para hacer referencia al objeto IDE de macros, agregue lo siguiente al código:
// 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;
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; // 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.
O bien
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;
Para hacer referencia al objeto IDE de macros, agregue lo siguiente al código:
// 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);
Vea también
Tareas
Cómo: Agregar referencias a los espacios de nombres EnvDTE, EnvDTE80 y EnvDTE90
Cómo: Controlar complementos con el Administrador de complementos
Conceptos
Adjuntar elementos a instancias concretas de IDE
Gráfico del modelo de objetos de automatización