Como obter referências para os objetos DTE e DTE2
Dica
Em Visual Studio 2013, suplementos são preteridos.Recomendamos que você atualize seus suplementos para as extensões VSPackage.Para obter mais informações, consulte Perguntas frequentes: convertendo suplementos em extensões VSPackage.
No conjunto de EnvDTE , o objeto de DTE representa o ambiente de desenvolvimento integrado Visual Studio (IDE) e é o objeto no nível mais alto na hierarquia de automação- modelo. Para obter acesso ao modelo de automação principal, um aplicativo de automação deve ter uma referência a esse objeto.
No entanto, a adição do conjunto de EnvDTE80 fornece uma substituição o objeto de nível superior, que é chamado DTE2 e substitui o objeto de DTE . Embora ambos os objetos ato- e são programados - semelhante, DTE2 contém a nova funcionalidade e hospeda novos objetos e atualizados e coleções.
Quando você cria novos aplicativos de automação, recomendamos que você cria referências aos dois objetos ao objeto de DTE2 para fornecer acesso a nova funcionalidade e o objeto de DTE para fornecer acesso ao resto da funcionalidade principal. Nós também recomendável que sempre que possível você usa os novos objetos e coleções em DTE2 em vez de aquelas em DTE.
As etapas a seguir mostram como obter uma referência ao objeto de DTE2 . (O mesmo procedimento aplica-se ao objeto DTE.) Antes de adicionar uma referência a um objeto, você deve adicionar referências à biblioteca apropriado do assembly e de tipo. Para obter mais informações, consulte Como adicionar referências a namespaces de automação.
O identificador de programação (ProgID) a ser usado para o Visual Studio 2013 é VisualStudio.DTE.12.0. Você pode converter o objeto retornado em uma interface DTE2.
Quando são chamados, propriedades, métodos, e eventos de DTE2 retorna os tipos de DTE . Por exemplo, Solution retorna um objeto de Solution , não um objeto de Solution2 como se poderia esperar. É por isso que, quando você usa membros ou outro de DTE2 membros do tipo, você deve explicitamente os typecast. Este design promove a consistência e reduz a confusão. O assembly EnvDTE80.dll retorna de maneira consistente a mesma interface para todas as propriedades DTE2. Retornar a versão mais recente da interface seria desconcertante- por exemplo, se uma versão futura de Visual Studio foi ter um tipo DTE3, então quaisquer interfaces podem retornar DTE, qualquer DTE2, e qualquer DTE3. Além disso, pode criar problemas de interoperabilidade COM porque o “2 " interfaces em EnvDTE80 derivam das interfaces de EnvDTE . Por exemplo, Window2 deriva de Window; se uma propriedade de DTE foi adicionada a Window2, iria ocultar a propriedade e não o trabalho de Windows corretamente com aplicativos COM.
Dica
Seu computador pode mostrar diferentes nomes ou localizações para alguns dos elementos de interface do usuário Visual Studio nas instruções a seguir.A edição do Visual Studio que você possui e as configurações que você usa determinam esses elementos.Para obter mais informações, consulte Personalizando configurações de desenvolvimento no Visual Studio.
Para fazer referência ao objeto do DTE2 no Visual Basic e C#
Em seu código, adicione isso:
' 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 fazer referência ao objeto do DTE ou DTE2 no Visual C++ (ATL)
Em seu código, adicione isso:
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;
Consulte também
Tarefas
Como adicionar referências a namespaces de automação
Como controlar suplementos usando o Gerenciador de Suplementos
Conceitos
Anexando a instâncias específicas do IDE
Gráfico do modelo de objetos automation