Como: Criar e anexar a outra instância do Visual Studio
Em alguns casos é útil criar programaticamente uma nova instância de Visual Studio ou anexar a uma instância específica de Visual Studio que já está em execução. Se duas instâncias de Visual Studio executando em um sistema e possuem a mesma solução em aberto — por exemplo, uma instância é executar uma compilação da solução e o Outros é executar uma compilação de depurar — você pode programar seu suplemento para diferenciar entre eles.
Você pode, por exemplo:
Iniciar uma ocorrência de Visual Studio com base em um caminho para um arquivo ou uma solução.
Anexar a uma instância de Visual Studio com base em um caminho para um arquivo ou uma solução.
Carregar um arquivo ou uma solução em uma instância existente de Visual Studio.
Criar uma nova instância de Visual Studio onde a instância desligado quando:
Criar uma nova instância de Visual Studio onde a instância permanece carregada mesmo quando:
Objetos retornados podem ser convertidos em seus respectivos objetos, sistema autônomo, por exemplo, DTE2 e Solution2.
Observação: |
---|
As caixas de diálogo e comandos de menu demonstradas podem ser diferentes daqueles descritas na Ajuda, dependendo das configurações ativas ou configurações de edição.Esses procedimentos foram desenvolvidos com o Geral Development Settings ativo.Para alterar as configurações, escolher Import and ExportSettings on the Tools menu.Para obter mais informações, consulte Configurações do Visual Studio. |
Exemplo
Para criar uma nova instância de Visual Studio, use o CreateObject Função (Visual Basic) ou System.Activator.CreateInstance. Ao usar o CreateObject função na Visual Basic, você pode passar valores de qualquer uma "VisualStudio.DTE.8.0" ou "VisualStudio.Solution.8.0." Os exemplos abaixo ilustram esses três métodos.
' 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;
}
No Visual Basic ambas as instruções de exemplo, criar uma nova instância das Visual Studio IDE. A primeira demonstrativo diretamente cria uma nova instância enquanto a segunda demonstrativo cria uma nova instância, criando uma nova solução.
Para obter uma referência a uma instância existente do Visual Studio IDE, você pode usar o Função GetObject (Visual Basic). Você pode fazer o seguinte:
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")