Cómo: Crear otra instancia de Visual Studio y asociarle elementos
Actualización: noviembre 2007
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á generando 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:
Crear una nueva instancia de Visual Studioen la que ésta permanezca cargada aunque:
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 desarrollaron con la Configuración general de desarrollo 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 (Función, Visual Basic) o System.Activator.CreateInstance. Cuando utiliza la función CreateObject en Visual Basic, puede pasar valores de "VisualStudio.DTE.8.0" o "VisualStudio.Solution.8.0." . Los ejemplos siguientes ilustran estos tres 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;
}
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 (Función, Visual Basic). 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.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")