방법: Visual Studio 인스턴스 만들기 또는 다른 Visual Studio 인스턴스에 연결
경우에 따라서는 프로그래밍 방식으로 Visual Studio의 새 인스턴스를 만들거나 이미 실행 중인 Visual Studio 인스턴스에 연결하는 것이 유용합니다.두 개의 Visual Studio 인스턴스가 시스템에 함께 실행 중이고 둘 다 같은 솔루션을 열고 각각 솔루션 빌드와 디버그 빌드를 수행하는 경우, 이들 두 인스턴스를 구분하기 위해 추가 기능을 프로그래밍할 수 있습니다.
예를 들어, 다음과 같은 방법을 사용할 수 있습니다.
파일 또는 솔루션의 경로를 기준으로 Visual Studio 인스턴스를 시작합니다.
파일 또는 솔루션의 경로를 기준으로 Visual Studio의 인스턴스에 연결합니다.
기존 Visual Studio 인스턴스에 파일 또는 솔루션을 로드합니다.
다음과 같은 경우에는 인스턴스가 종료되면 Visual Studio의 새 인스턴스를 만듭니다.
다음과 같은 경우에는 인스턴스가 로드된 채로 남아 있더라도 Visual Studio의 새 인스턴스를 만듭니다.
반환된 개체는 DTE2 및 Solution2 같이 상응하는 개체로 캐스팅될 수 있습니다.
[!참고]
표시되는 대화 상자와 메뉴 명령은 활성 설정이나 버전에 따라 도움말에서 설명하는 것과 다를 수 있습니다.이러한 절차는 일반 개발 설정을 사용하여 개발되었습니다.설정을 변경하려면 도구 메뉴에서 설정 가져오기 및 내보내기를 선택합니다.자세한 내용은 Visual Studio 설정을 참조하십시오.
예제
Visual Studio의 새 인스턴스를 만들려면 CreateObject Function 또는 System.Activator.CreateInstance를 사용합니다.Visual Basic에서 CreateObject 함수를 사용하는 경우 "VisualStudio.DTE.10.0." 값을 전달할 수 있습니다. 아래 예제에서는 이와 관련된 방법을 보여 줍니다.
' 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;
}
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.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")