다음을 통해 공유


방법: Visual Studio 인스턴스 만들기 또는 다른 Visual Studio 인스턴스에 연결

Visual Studio의 추가 기능은 Visual Studio 2013에서 사용되지 않습니다. 추가 기능을 VSPackage 확장으로 업그레이드하는 것이 좋습니다. 업그레이드에 대한 자세한 내용은 FAQ: VSPackage 확장으로 추가 기능 변환 을 참조하십시오.

경우에 따라서는 프로그래밍 방식으로 Visual Studio의 새 인스턴스를 만들거나 이미 실행 중인 Visual Studio 인스턴스에 연결하는 것이 유용합니다. 두 개의 Visual Studio 인스턴스가 시스템에 함께 실행 중이고 둘 다 같은 솔루션을 열고 각각 솔루션 빌드와 디버그 빌드를 수행하는 경우, 이들 두 인스턴스를 구분하기 위해 추가 기능을 프로그래밍할 수 있습니다.

예를 들어, 다음과 같은 방법을 사용할 수 있습니다.

  • 파일 또는 솔루션의 경로를 기준으로 Visual Studio 인스턴스를 시작합니다.

  • 파일 또는 솔루션의 경로를 기준으로 Visual Studio의 인스턴스에 연결합니다.

  • 기존 Visual Studio 인스턴스에 파일 또는 솔루션을 로드합니다.

  • 다음과 같은 경우에는 인스턴스가 종료되면 Visual Studio의 새 인스턴스를 만듭니다.

    • DTE 개체와 Solution 개체의 외부 참조 수가 모두 0인 경우

      -및-

    • IDE(통합 개발 환경)가 사용자에게 표시되지 않거나 사용자가 이를 제어할 수 없는 경우

  • 다음과 같은 경우에는 인스턴스가 로드된 채로 남아 있더라도 Visual Studio의 새 인스턴스를 만듭니다.

    • DTE 개체와 Solution 개체의 외부 참조 수가 모두 0인 경우

    • IDE가 사용자에게 표시되는 경우

      -및-

    • 사용자가 IDE를 제어하고 있는 경우

반환된 개체는 DTE2Solution2 같이 상응하는 개체로 캐스팅될 수 있습니다.

참고

표시되는 대화 상자와 메뉴 명령은 활성 설정이나 버전에 따라 도움말에서 설명하는 것과 다를 수 있습니다.이러한 절차는 일반 개발 설정을 사용하여 개발되었습니다.설정을 변경하려면 도구 메뉴에서 설정 가져오기 및 내보내기를 선택합니다.자세한 내용은 Visual Studio에서 개발 설정 사용자 지정을 참조하십시오.

예제

Visual Studio의 새 인스턴스를 만들려면 CreateObject Function 또는 System.Activator.CreateInstance를 사용합니다. Visual Basic에서 CreateObject 함수를 사용하는 경우 "VisualStudio.DTE.11.0." 값을 전달할 수 있습니다. 아래 예제에서는 이와 관련된 방법을 보여 줍니다.

' CreateObject method 1 - VisualStudio.DTE.11.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.11.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.11.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.11.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.11.0");
    Object obj = System.Activator.CreateInstance(type, true);
    EnvDTE80.DTE2 dte8Obj = (EnvDTE80.DTE2)obj;
}

Visual Basic 예제에서 두 문은 모두 Visual Studio IDE의 새 인스턴스를 만듭니다. 첫 번째 문은 새 인스턴스를 직접 만드는 반면, 두 번째 문은 새 솔루션을 만드는 방식으로 새 인스턴스를 만듭니다.

기존 Visual Studio IDE 인스턴스를 참조하려면 GetObject Function를 사용해야 합니다. 다음 작업 중 하나를 수행할 수 있습니다.

Private Sub GetInstance1 ()
    Dim inst As Object
    Dim dte80Obj As EnvDTE80.DTE2
    inst = Microsoft.VisualBasic.Interaction.GetObject(, _
    "VisualStudio.DTE.11.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")

참고 항목

개념

추가 기능 등록

기타 리소스

추가 기능 및 마법사 만들기