Como: obter referências aos objetos de DTE2 e DTE

No EnvDTE assembly, o DTE objeto representa o Visual Studio integrado ao ambiente de desenvolvimento (IDE) e é o objeto de nível mais alto na hierarquia de modelo de automação.Todos os aplicativos de automação devem ter uma referência a este objeto para acessar o modelo de automação do núcleo.Que continua a ser o caso com Visual Studio.

Mas a adição da EnvDTE80 assembly fornece um objeto de nível superior de substituição chamado DTE2 que substitui o DTE objeto.Os dois objetos atuam e programa da mesma forma, mas DTE2 contém nova funcionalidade e hospeda um número de coleções e objetos novos e atualizados.

Como resultado, ao criar novos aplicativos de automação e suplementos, você deve criar referências para os dois objetos.O novo DTE2 objeto fornece acesso à nova funcionalidade, enquanto o DTE objeto fornece acesso para o restante da funcionalidade de automação do núcleo.Novos objetos e coleções em DTE2 deve ser usado em vez de objetos e coleções no DTE sempre que possível.

Os procedimentos a seguir mostram como obter uma referência para o DTE2 objeto.(O mesmo procedimento se aplica para o DTE objeto.) Antes de adicionar referências a objetos, você deve adicionar referências a assemblies adequadas e biblioteca de tipos.Para mais informações, consulte Como: adicionar referências aos Namespaces de automação.

O identificador programático (ProgID) para Visual Studio 2012 é VisualStudio.DTE.11.0.Em seguida, você pode converter o objeto retornado em um DTE2 interface.

O DTE2 propriedades, métodos e eventos, quando chamado, retornam a DTE tipos.Por exemplo, Solution retorna um Solution objeto, não um Solution2 de objeto como esperado.Isso é por isso, ao usar o DTE2 conversão de tipo membros ou outros membros de tipo, você deve explicitamente de-los.Isso foi feito intencionalmente para um número de razões.O primeiro motivo é promover consistência e reduzir a confusão.O assembly EnvDTE80.dll consistentemente retorna a mesma interface para todos os DTE2 propriedades.Retornando a versão mais recente da interface seria confuso.Por exemplo, se uma versão futura do Visual Studio tem um tipo de DTE3, e algumas interfaces poderiam retornar DTE, alguns DTE2e alguns DTE3.Além disso, ele poderia representar problemas de interoperabilidade COM porque as interfaces "2" em EnvDTE80 derivam de EnvDTE interfaces.Por exemplo, Window2 deriva de Window.Se um DTE propriedade foram adicionados ao Window2, então seria ocultar o Windows propriedade e não funcionará corretamente com aplicativos COM.

ObservaçãoObservação

As caixas de diálogo e comandos de menu você vê podem diferir daquelas descritas na ajuda dependendo de suas configurações ativas ou versão.Esses procedimentos foram desenvolvidos com o General Development Settings ativo.Para alterar as configurações, escolha importação e Exportarconfigurações sobre o Ferramentas menu.Para mais informações, consulte Configurações de Visual Studio.

Para fazer referência ao objeto DTE2 em Visual Basic e C#

  • No seu código, adicione o seguinte:

    ' 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 fazer referência ao objeto DTE ou DTE2 no Visual C++ (ATL)

  • No seu código, digite o seguinte:

    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;
    

Consulte também

Tarefas

Como: adicionar referências aos Namespaces de automação

Como: Add-Ins de controle, usando o Gerenciador de suplemento

Conceitos

Anexando a instâncias específicas do IDE

Registro do suplemento

Gráfico de modelo de objeto de automação

Outros recursos

A criação de suplementos e assistentes