Sdílet prostřednictvím


Jak: vytvoření a připojení k jiné instanci aplikace Visual Studio

V některých případech je vhodné programově vytvářet novou instanci Visual Studio nebo se připojte k určité instanci Visual Studio již spuštěn.Pokud dvě instance Visual Studio jsou spuštěny v systému a mají stejné řešení otevřít – například provádí jednu instanci sestavení řešení a druhý je provést ladění sestavení – můžete program doplňku je rozlišit.

Můžete například:

  • Spustit instanci Visual Studio založené na cestu k souboru nebo řešení.

  • Připojit k instanci Visual Studio založené na cestu k souboru nebo řešení.

  • Načtení souboru nebo řešení do existující instanci Visual Studio.

  • Vytvořit novou instanci Visual Studio kde instance vypne při:

    • Počet externí odkaz i DTE objektu a Solution objektu jsou 0.

      a

    • Integrované vývojové prostředí (IDE) se uživateli nezobrazí nebo není pod kontrolou uživatelů.

  • Vytvořit novou instanci Visual Studio kde zůstane načtené instance i když:

    • Počet externí odkaz i DTE objektu a Solution objektu jsou 0.

    • IDE se zobrazí uživateli.

      a

    • IDE je ovládána uživatelem.

Vrácených objektů můžete obsadit jejich příslušné objekty, jako například DTE2 a Solution2.

[!POZNÁMKA]

Dialogová okna a příkazy v nabídkách menu, které vidíte, se mohou lišit od těch popsaných v nápovědě, v závislosti na vašich aktivních nastaveních nebo edici.Tyto postupy byly vyvinuty s aktivní Obecné nastavení pro vývoj.Chcete-li změnit nastavení, zvolte Import a ExportNastavení na Nástroje nabídce.Další informace naleznete v tématu Nastavení aplikace Visual Studio.

Příklad

Vytvořit novou instanci Visual Studio, použijte buď CreateObject Function nebo System.Activator.CreateInstance.Při použití CreateObject ve funkci Visual Basic, hodnoty předat "VisualStudio.DTE.10.0." níže uvedené příklady těchto metod.

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

V Visual Basic například oba příkazy vytvořit novou instanci Visual Studio IDE.První příkaz vytvoří novou instanci přímo, zatímco druhý příkaz vytvoří novou instanci vytvořením nové řešení.

Chcete-li získat odkaz na existující instanci Visual Studio IDE, můžete použít GetObject Function.Proveďte následující:

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

Viz také

Koncepty

Registrace

Další zdroje

Vytváření doplňků a průvodců