Condividi tramite


Procedura: creare e collegarsi a un'altra istanza di Visual Studio

In alcuni casi è utile creare a livello di codice una nuova istanza di Visual Studio o collegarsi a un'istanza specifica di Visual Studio già in esecuzione.Se in un sistema sono in esecuzione due istanze di Visual Studio con la stessa soluzione aperta, ad esempio in un'istanza è in corso la compilazione di una soluzione e nell'altra è in corso una build di debug, è possibile programmare il componente aggiuntivo in modo da differenziarle.

È ad esempio possibile:

  • Avviare un'istanza di Visual Studio in base a un percorso di un file o di una soluzione.

  • Collegarsi a un'istanza di Visual Studio in base a un percorso di un file o di una soluzione.

  • Caricare un file o una soluzione in un'istanza esistente di Visual Studio.

  • Creare una nuova istanza di Visual Studio in cui l'istanza viene chiusa quando:

    • Il conteggio dei riferimenti esterni sull'oggetto DTE e sull'oggetto Solution è pari a zero.

      - e -

    • L'ambiente di sviluppo integrato (IDE, Integrated Development Environment) non viene visualizzato oppure non è sotto il controllo dell'utente.

  • Creare una nuova istanza di Visual Studio in cui l'istanza rimane caricata anche quando:

    • Il conteggio dei riferimenti esterni sull'oggetto DTE e sull'oggetto Solution è pari a zero.

    • L'IDE viene visualizzato all'utente.

      - e -

    • L'IDE è sotto il controllo dell'utente.

È possibile eseguire il cast degli oggetti restituiti sui rispettivi oggetti, ad esempio DTE2 e Solution2.

[!NOTA]

È possibile che le finestre di dialogo e i comandi di menu visualizzati siano diversi da quelli descritti nella Guida a seconda delle impostazioni attive o dell'edizione del programma.Queste procedure sono state sviluppate con le Impostazioni generali per lo sviluppo attive.Per modificare le impostazioni, scegliere Importa/EsportaImpostazioni dal menu Strumenti.Per ulteriori informazioni, vedere Impostazioni di Visual Studio.

Esempio

Per creare una nuova istanza di Visual Studio, utilizzare CreateObject Function oppure System.Activator.CreateInstance.Quando si utilizza la funzione CreateObject in Visual Basic, è possibile passare valori di "VisualStudio.DTE.10.0.". Negli esempi riportati di seguito vengono illustrati questi metodi.

' 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;
}

Nell'esempio relativo a Visual Basic entrambe le istruzioni creano una nuova istanza dell'IDE di Visual Studio.La prima istruzione crea direttamente una nuova istanza, mentre la seconda crea una nuova istanza creando una nuova soluzione.

Per ottenere un riferimento a un'istanza esistente dell'IDE di Visual Studio, è possibile utilizzare GetObject Function.È possibile eseguire una delle seguenti operazioni:

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

Vedere anche

Concetti

Registrazione di un componente aggiuntivo

Altre risorse

Creazione di componenti aggiuntivi e di procedure guidate