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çã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