Compartilhar via


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

Registro de suplementos

Gráfico do modelo de objetos automation

Outros recursos

Criando suplementos e assistentes