Compartilhar via


Como criar uma instância do Visual Studio e anexá-la a outra

Os suplementos do Visual Studio foram substituídos no Visual Studio 2013. Você deve atualizar seus suplementos para as extensões VSPackage. Para obter mais informações sobre atualização, consulte Perguntas frequentes: convertendo suplementos em extensões VSPackage.

Em alguns casos é útil criar uma nova instância de Visual Studio ou anexá-la por programação a uma instância específica de Visual Studio que já está sendo executado. Se duas instâncias de Visual Studio estão executando em um sistema e ambas têm a mesma solução aberta — por exemplo, uma instância está executando uma compilação de solução e a outra é executa uma construção de depuração — você pode programar o suplemento para diferenciar entre eles.

Você pode, por exemplo:

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

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

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

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

    • Contagem de referência externa em ambos o objeto de DTE e o objeto de Solution é 0.

      -e-

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

  • Crie uma nova instância de Visual Studio onde o de instância carregadas mesmo quando:

    • Contagem de referência externa em ambos o objeto de DTE e o objeto de Solution é 0.

    • IDE é exibido para o usuário.

      -e-

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

Os objetos retornados podem ser convertidos em seus respectivos objetos, como DTE2 e Solution2.

Dica

As caixas de diálogo e os comandos de menu que você vê podem diferir das descritas no Help dependendo de suas configurações ativas ou de edição.Esses procedimentos foram desenvolvidos com as Configurações Gerais de Desenvolvimento ativas.Para alterar as configurações, escolha Importar e ExportarConfigurações no menu de Ferramentas.Para obter mais informações, consulte Personalizando configurações de desenvolvimento no Visual Studio.

Exemplo

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

' CreateObject method 1 - VisualStudio.DTE.11.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.11.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.11.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.11.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.11.0");
    Object obj = System.Activator.CreateInstance(type, true);
    EnvDTE80.DTE2 dte8Obj = (EnvDTE80.DTE2)obj;
}

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

Para obter uma referência a uma instância existente de Visual Studio o IDE, você pode usar GetObject Function. Você pode fazer um destes procedimentos:

Private Sub GetInstance1 ()
    Dim inst As Object
    Dim dte80Obj As EnvDTE80.DTE2
    inst = Microsoft.VisualBasic.Interaction.GetObject(, _
    "VisualStudio.DTE.11.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

Registro de suplementos

Outros recursos

Criando suplementos e assistentes