Compartilhar via


How to: Obter referências aos objetos de DTE2 e DTE

No EnvDTE assembly, o DTE objeto representa o Visual Studio (IDE) do ambiente de desenvolvimento integrado 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 esse 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 agir e programar de forma semelhante, mas DTE2 contém a nova funcionalidade e hospeda um número de novos e atualizados de objetos e coleções.

Como resultado, ao criar novos aplicativos de automação e add-ins, você deve criar referências para os dois objetos. O novo DTE2 objeto fornece acesso para a nova funcionalidade, enquanto o DTE objeto fornece acesso para o restante da funcionalidade de automação de núcleo. Os novos objetos e coleções em DTE2 deve ser usado em vez de objetos e coleções na 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 aos objetos, você deve adicionar referências aos assemblies apropriados e biblioteca de tipos. Para obter mais informações, consulte How to: Adicionar Referências aos Namespaces de automação.

O identificador programático (ProgID) para usar é VisualStudio.DTE.10.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 o objeto, não uma Solution2 como você pode esperar de objeto. Isso é por isso que, ao usar o DTE2 conversão de tipo membros ou outros membros de tipo, você deve explicitamente de-los. Isso foi feito intencionalmente por vários motivos. O primeiro motivo é promover a consistência e a reduzir a confusão. O assembly EnvDTE80.dll consistentemente retorna a mesma interface para todas as 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 o "2" interfaces em EnvDTE80 derivam de EnvDTE interfaces. Por exemplo, Window2 deriva de Window. Se um DTE propriedade foram adicionados ao Window2, então ele ocultaria o Windows propriedade e não funcionará corretamente com todos os aplicativos COM.

ObservaçãoObservação

As caixas de diálogo e comandos de menu demonstradas podem ser diferentes daqueles descritos na Ajuda, dependendo das configurações ativas ou configurações de edição. Esses procedimentos foram desenvolvidos com o General Development Settings ativo. Para alterar as configurações, escolha importação e Exportar configurações sobre o Ferramentas menu. Para obter mais informações, consulte Trabalhando com configurações.

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.10.0")
    
    // Get an instance of the currently running Visual Studio IDE.
    EnvDTE80.DTE2 dte2;
    dte2 = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.
    GetActiveObject("VisualStudio.DTE.10.0");
    
  • Para fazer referência ao objeto de IDE de Macros no seu código, adicione o seguinte:

    ' Get an instance of the currently running Macros IDE.
    Dim DTE2 as EnvDTE80.DTE2
    Dim MacrosDTE2 as EnvDTE._DTE
    DTE2 = System.Runtime.InteropServices.Marshal.GetActiveObject_
    ("VisualStudio.DTE2")
    MacrosDTE2 = DTE2.MacrosIDE
    
    // Get an instance of the currently running Macros IDE.
    EnvDTE80.DTE2 dte2;
    EnvDTE.DTE MacrosDTE;
    dte2 = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.
    GetActiveObject("VisualStudio.DTE.10.0");
    MacrosDTE = dte2.MacrosIDE;
    

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.10.0",&clsid);
    CLSIDFromProgID(L"VisualStudio.DTE.10.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;
    
  • Para fazer referência ao objeto de IDE de Macros no seu código, adicione o seguinte:

    // Get an instance of the currently running Macros IDE.
    CComPtr<EnvDTE80::DTE2> m_pDTE2;
    CComPtr<EnvDTE::_DTE> m_pMacrosIDE;
    CLSID clsid;
    CLSIDFromProgID(L"VisualStudio.DTE.10.0",&clsid);
    CComPtr<IUnknown> punk;
    HRESULT hr = GetActiveObject(clsid,NULL,&punk);
    m_pDTE = punk;
    m_pDTE->get_MacrosIDE((void **)&m_pMacrosIDE);
    

Consulte também

Tarefas

How to: Adicionar Referências aos Namespaces de automação

How to: Adicionar-Ins usando o Adicionar-no Gerenciador de controle

Conceitos

Anexando a instâncias específicas do IDE

Adicionar-No registro

Automation Object Model Chart

Outros recursos

Criação de assistentes e ins Adicionar-