Поделиться через


Практическое руководство. Создание другого экземпляра Visual Studio

Обновлен: Ноябрь 2007

В некоторых случаях бывает удобно программно создать новый экземпляр Visual Studio или подключиться к определенному уже запущенному экземпляру Visual Studio. Если в системе запущено два экземпляра Visual Studio и в них открыто одно и то же решение, — например, один экземпляр производит построение решения, а другой производит отладочное построение — можно запрограммировать надстройку так, чтобы она различала эти экземпляры.

Например, можно выполнить следующие действия:

  • Запустить экземпляр Visual Studio в зависимости от пути к файлу или проекту.

  • Подключиться к экземпляру Visual Studio в зависимости от пути к файлу или проекту.

  • Загрузить файл или решение в существующий экземпляр Visual Studio.

  • Создать новый экземпляр Visual Studio, который будет закрываться при следующих условиях

    • Число внешних ссылок на объект DTE и объект Solution равно 0.

      и

    • Интегрированная среда разработки не отображается пользователю или не находится под управлением пользователя.

  • Создать новый экземпляр Visual Studio, который будет оставаться загруженным при следующих условиях

    • Число внешних ссылок на объект DTE и объект Solution равно 0.

    • Интегрированная среда разработки отображается пользователю.

      и

    • Пользователь управляет интегрированной средой разработки.

Возвращенные объекты можно привести к соответствующим им объектам, таким как DTE2 и Solution2.

6cefss65.alert_note(ru-ru,VS.90).gifПримечание.

Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих параметров или выпуска. Эти процедуры были разработаны с обычными параметрами разработки. Чтобы изменить настройки, в меню Сервис выберите команду Импорт и экспортпараметров. Дополнительные сведения см. в разделе Параметры Visual Studio.

Пример

Для создания нового экземпляра Visual Studio используйте Функция CreateObject (Visual Basic) или System.Activator.CreateInstance. При использовании функции CreateObject в Visual Basic можно подставить значения "VisualStudio.DTE.8.0" или "VisualStudio.Solution.8.0." Эти три метода показаны в следующих примерах.

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

В примере Visual Basic оба оператора создают новый экземпляр интегрированной среды разработки Visual Studio. Первый оператор создает новый экземпляр непосредственно, а второй создает новый экземпляр, создавая новое решение.

Чтобы получить ссылку на существующий экземпляр интегрированной среды разработки Visual Studio, можно использовать Функция GetObject (Visual Basic). Можно выполнить одно из следующих действий.

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

См. также

Основные понятия

Регистрация надстройки

Другие ресурсы

Создание надстроек и мастеров