Compartilhar via


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

Em alguns casos, é útil programaticamente, criar uma nova instância de Visual Studio ou anexar a uma instância específica de Visual Studio é que já em execução. Se duas instâncias de Visual Studio são executados em um sistema e possuem a mesma solução aberto — por exemplo, uma instância é executar uma compilação da solução e o outro é executar uma compilação de depuração — você pode programar o add-in para diferenciá-las.

Você pode, por exemplo:

  • Iniciar uma instâ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 do Visual Studio.

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

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

      - e -

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

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

    • A contagem de referência externa em ambos os DTE objeto e o Solution objeto são 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, como DTE2 e Solution2.

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.

Exemplo

Para criar uma nova instância do Visual Studio, use o CreateObject Function (Visual Basic) ou System.Activator.CreateInstance. Ao usar o CreateObject função em Visual Basic, você pode passar valores "VisualStudio.DTE.10.0." os exemplos abaixo ilustram esses métodos.

' CreateObject method 1 - VisualStudio.DTE.10.0.
Public Sub Exec(ByVal commandName As String, ByVal executeOption _
As vsCommandExecOption, ByRef varIn As Object, ByRef varOut As _
Object,  ByRef handled As Boolean) Implements IDTCommandTarget.Exec
   handled = False
   If executeOption = _
      vsCommandExecOption.vsCommandExecOptionDoDefault Then
      If commandName = "VBTestAddin.Connect.VBTestAddin" Then
          CreateNewInstance1(_applicationObject)
          handled = True
          Exit Sub
      End If
   End If
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.10.0", "")
    dte80Obj = CType(inst, EnvDTE80.DTE2)
    MsgBox(dte80Obj.DisplayMode.ToString)
End Sub
' GetTypeFromProgID and CreateInstance method.
Public Sub Exec(ByVal commandName As String, ByVal executeOption _
As vsCommandExecOption, ByRef varIn As Object, ByRef varOut As _
Object,  ByRef handled As Boolean) Implements IDTCommandTarget.Exec
   handled = False
   If executeOption = _
      vsCommandExecOption.vsCommandExecOptionDoDefault Then
      If commandName = "VBTestAddin.Connect.VBTestAddin" Then
          CreateNewInstance2(_applicationObject)
          handled = True
          Exit Sub
      End If
   End If
End Sub

Private Sub CreateNewInstance2(ByVal dte As DTE2)
    Dim Type As System.Type
    Dim inst As Object
    Dim dte80Obj As EnvDTE80.DTE2
    Type = System.Type.GetTypeFromProgID("VisualStudio.DTE.10.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;
    CreateNewInstance2(_applicationObject);
}

private void CreateNewInstance2(DTE2 dte)
{
    System.Type Type;
    object inst;
    EnvDTE80.DTE2 dte80Obj;
    Type = System.Type.GetTypeFromProgID("VisualStudio.DTE.10.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.10.0");
    Object obj = System.Activator.CreateInstance(type, true);
    EnvDTE80.DTE2 dte8Obj = (EnvDTE80.DTE2)obj;
}

No Visual Basic exemplo, as duas afirmações criam uma nova instância da Visual Studio IDE. A primeira instrução diretamente cria uma nova instância, enquanto a segunda instrução cria uma nova instância, criando uma nova solução.

Para obter uma referência a uma instância existente da Visual Studio IDE, você pode usar o GetObject Function (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.10.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

Adicionar-No registro

Outros recursos

Criação de assistentes e ins Adicionar-