Como: Criar e anexar a outra instância do Visual Studio

Em alguns casos é útil criar programaticamente uma nova instância de Visual Studio ou anexar a uma instância específica de Visual Studio que já está em execução. Se duas instâncias de Visual Studio executando em um sistema e possuem a mesma solução em aberto — por exemplo, uma instância é executar uma compilação da solução e o Outros é executar uma compilação de depurar — você pode programar seu suplemento para diferenciar entre eles.

Você pode, por exemplo:

  • Iniciar uma ocorrência de Visual Studio com base em um caminho para um arquivo ou uma solução.

  • Anexar a uma instância de Visual Studio com base em um caminho para um arquivo ou uma solução.

  • Carregar um arquivo ou uma solução em uma instância existente de Visual Studio.

  • Criar uma nova instância de Visual Studio onde a instância desligado quando:

    • A contagem de referência externa a DTE objeto e o Solution objeto são de 0.

      - e -

    • O ambiente de desenvolvimento integrado (IDE) não é exibido para o usuário ou não está sob o controle do usuário.

  • Criar uma nova instância de Visual Studio onde a instância permanece carregada mesmo quando:

    • A contagem de referência externa a DTE objeto e o Solution objeto são de 0.

    • O IDE é exibido ao usuário.

      - e -

    • O IDE está sob controle de usuário.

Objetos retornados podem ser convertidos em seus respectivos objetos, sistema autônomo, por exemplo, DTE2 e Solution2.

Observação:

As caixas de diálogo e comandos de menu demonstradas podem ser diferentes daqueles descritas na Ajuda, dependendo das configurações ativas ou configurações de edição.Esses procedimentos foram desenvolvidos com o Geral Development Settings ativo.Para alterar as configurações, escolher Import and ExportSettings on the Tools menu.Para obter mais informações, consulte Configurações do Visual Studio.

Exemplo

Para criar uma nova instância de Visual Studio, use o CreateObject Função (Visual Basic) ou System.Activator.CreateInstance. Ao usar o CreateObject função na Visual Basic, você pode passar valores de qualquer uma "VisualStudio.DTE.8.0" ou "VisualStudio.Solution.8.0." Os exemplos abaixo ilustram esses três métodos.

' CreateObject method 1 - VisualStudio.DTE.8.0.
Public Sub OnConnection(ByVal application As Object, ByVal _
  connectMode As ext_ConnectMode, ByVal addInInst As Object, _
  ByRef custom As Array) Implements IDTExtensibility2.OnConnection
    _applicationObject = CType(application, DTE2)
    _addInInstance = CType(addInInst, AddIn)
    CreateNewInstance1(_applicationObject)
End Sub

Private Sub CreateNewInstance1(ByVal dte As DTE2)
    Dim inst As Object
    Dim dte80Obj As EnvDTE80.DTE2
    inst = Microsoft.VisualBasic.Interaction. _
    CreateObject("VisualStudio.DTE.8.0", "")
    dte80Obj = CType(inst, EnvDTE80.DTE2)
    MsgBox(dte80Obj.DisplayMode.ToString)
End Sub
' CreateObject method 2 - VisualStudio.Solution.8.0.
Public Sub OnConnection(ByVal application As Object, ByVal _
  connectMode As ext_ConnectMode, ByVal addInInst As Object, _
  ByRef custom As Array) Implements IDTExtensibility2.OnConnection
    _applicationObject = CType(application, DTE2)
    _addInInstance = CType(addInInst, AddIn)
    CreateNewInstance2(_applicationObject)
End Sub

Private Sub CreateNewInstance2(ByVal dte As DTE2)
    Dim inst As Object
    Dim dte80Obj As EnvDTE80.DTE2
    inst = Microsoft.VisualBasic.Interaction. _
    CreateObject("VisualStudio.Solution.8.0", "")
    dte80Obj = CType(inst, EnvDTE80.DTE2)
    MsgBox(dte80Obj.DisplayMode.ToString)
End Sub
' GetTypeFromProgID and CreateInstance method.
Public Sub OnConnection(ByVal application As Object, ByVal _
  connectMode As ext_ConnectMode, ByVal addInInst As Object, _
  ByRef custom As Array) Implements IDTExtensibility2.OnConnection
    _applicationObject = CType(application, DTE2)
    _addInInstance = CType(addInInst, AddIn)
    CreateNewInstance3(_applicationObject)
End Sub

Private Sub CreateNewInstance3(ByVal dte As DTE2)
    Dim Type As System.Type
    Dim inst As Object
    Dim dte80Obj As EnvDTE80.DTE2
    Type = System.Type.GetTypeFromProgID("VisualStudio.DTE.8.0")
    inst = System.Activator.CreateInstance(Type, True)
    dte80Obj = CType(inst, EnvDTE80.DTE2)
    MsgBox(dte80Obj.DisplayMode.ToString)
End Sub

public void OnConnection(object application, ext_ConnectMode 
  connectMode, object addInInst, ref Array custom)
{
    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;
    CreateNewInstance3(_applicationObject);
}

private void CreateNewInstance3(DTE2 dte)
{
    System.Type Type;
    object inst;
    EnvDTE80.DTE2 dte80Obj;
    Type = System.Type.GetTypeFromProgID("VisualStudio.DTE.8.0");
    inst = System.Activator.CreateInstance(Type, true);
    dte80Obj = (EnvDTE80.DTE2)inst;
    System.Windows.Forms.MessageBox.Show
      (dte80Obj.DisplayMode.ToString());
}
// Create a new instance of Visual Studio by using 
// GetTypeFromProgID and CreateInstance.
private void CreateNewInstance1()
{
    System.Type type = System.Type.GetTypeFromProgID
    ("VisualStudio.DTE.8.0");
    Object obj = System.Activator.CreateInstance(type, true);
    EnvDTE80.DTE2 dte8Obj = (EnvDTE80.DTE2)obj;
}

No Visual Basic ambas as instruções de exemplo, criar uma nova instância das Visual Studio IDE. A primeira demonstrativo diretamente cria uma nova instância enquanto a segunda demonstrativo cria uma nova instância, criando uma nova solução.

Para obter uma referência a uma instância existente do Visual Studio IDE, você pode usar o Função GetObject (Visual Basic). Você pode fazer o seguinte:

Private Sub GetInstance1 ()
    Dim inst As Object
    Dim dte80Obj As EnvDTE80.DTE2
    inst = Microsoft.VisualBasic.Interaction.GetObject(, _
    "VisualStudio.DTE.8.0")
    dte80Obj = CType(inst, EnvDTE80.DTE2)
    MsgBox(dte80Obj.DisplayMode.ToString)
End Sub

' -or-
Dim inst As Object
inst = Microsoft.VisualBasic.Interaction.GetObject(, _
  "VisualStudio.Solution.8.0")
' ---------------------------
' -or-
' Change the path to your application.
Dim inst As Object
inst = Microsoft.VisualBasic.Interaction.GetObject _
  ("C:\Projects\WindowsApplication1\WindowsApplication1.sln")
' ---------------------------
' -or-
' Change the path to your application.
Dim inst As Object
inst = Microsoft.VisualBasic.Interaction.GetObject _
  ("C:\Projects\WindowsApplication1\WindowsApplication1.sln", _
  "VisualStudio.Solution.8.0")

Consulte também

Conceitos

inscrição do suplemento

Outros recursos

Criando suplementos e assistentes