Compartir a través de


Cómo: Crear otra instancia de Visual Studio y asociarle elementos

En algunos casos es útil crear mediante programación una nueva instancia de Visual Studio o crear una asociación a una instancia específica de Visual Studio que ya esté en ejecución.Si dos instancias de Visual Studio están en ejecución en un sistema y tienen abierta la misma solución (por ejemplo, una instancia está compilando una solución y la otra una versión de depuración), puede programar un complemento para diferenciarlas.

Puede, por ejemplo:

  • Iniciar una instancia de Visual Studio basada en una ruta a un archivo o a una solución.

  • Crear una asociación a una instancia de Visual Studio basada en una ruta a un archivo o a una solución.

  • Cargar un archivo o una solución en una instancia ya existente de Visual Studio.

  • Crear una nueva instancia de Visual Studio que se cierre cuando:

    • El número de referencias externas en ambos objetos DTE y Solution sea 0.

      - y -

    • El entorno de desarrollo integrado (IDE) no se muestre al usuario o no esté bajo su control.

  • Crear una nueva instancia de Visual Studioen la que ésta permanezca cargada aunque:

    • El número de referencias externas en ambos objetos DTE y Solution sea 0.

    • Se muestre el IDE al usuario.

      - y -

    • El IDE esté bajo control del usuario.

Los objetos devueltos se pueden convertir en sus objetos respectivos, como DTE2 y Solution2.

[!NOTA]

Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valores de configuración o de edición activos.Estos procedimientos se han desarrollado con la Configuración de desarrollo general activa.Para cambiar la configuración, elija la opción Importar y exportarconfiguraciones del menú Herramientas.Para obtener más información, vea Valores de configuración de Visual Studio.

Ejemplo

Para crear una nueva instancia de Visual Studio, utilice CreateObject Function o System.Activator.CreateInstance.Cuando se usa la función CreateObject en Visual Basic, se pueden pasar valores de "VisualStudio.DTE.10.0.". Los ejemplos siguientes ilustran estos 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;
}

En el ejemplo de Visual Basic, ambas instrucciones crean una nueva instancia del IDE de Visual Studio.La primera instrucción crea directamente una nueva instancia, mientras que la segunda, una nueva instancia al crear una nueva solución.

Para obtener una referencia a una instancia existente del IDE de Visual Studio, puede utilizar GetObject Function.Puede realizar alguna de las siguientes operaciones:

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")

Vea también

Conceptos

Registro de complementos

Otros recursos

Crear complementos y asistentes