Como criar uma instância do Visual Studio e anexá-la a outra
Os suplementos do Visual Studio foram substituídos no Visual Studio 2013. Você deve atualizar seus suplementos para as extensões VSPackage. Para obter mais informações sobre atualização, consulte Perguntas frequentes: convertendo suplementos em extensões VSPackage.
Em alguns casos é útil criar uma nova instância de Visual Studio ou anexá-la por programação a uma instância específica de Visual Studio que já está sendo executado. Se duas instâncias de Visual Studio estão executando em um sistema e ambas têm a mesma solução aberta — por exemplo, uma instância está executando uma compilação de solução e a outra é executa uma construção de depuração — você pode programar o suplemento para diferenciar entre eles.
Você pode, por exemplo:
Inicie uma instância de Visual Studio com base em um caminho para um arquivo ou a uma solução.
Anexar a uma instância de Visual Studio com base em um caminho para um arquivo ou a uma solução.
Carregar um arquivo ou uma solução em uma instância existente de Visual Studio.
Crie uma nova instância de Visual Studio onde a instância é desligado quando:
Crie uma nova instância de Visual Studio onde o de instância carregadas mesmo quando:
Os objetos retornados podem ser convertidos em seus respectivos objetos, como DTE2 e Solution2.
Dica
As caixas de diálogo e os comandos de menu que você vê podem diferir das descritas no Help dependendo de suas configurações ativas ou de edição.Esses procedimentos foram desenvolvidos com as Configurações Gerais de Desenvolvimento ativas.Para alterar as configurações, escolha Importar e ExportarConfigurações no menu de Ferramentas.Para obter mais informações, consulte Personalizando configurações de desenvolvimento no Visual Studio.
Exemplo
Para criar uma nova instância de Visual Studio, use CreateObject Function ou System.Activator.CreateInstance. Ao usar a função de CreateObject em Visual Basic, você pode passar valores "VisualStudio.DTE.11.0." os exemplos a seguir ilustram esses métodos.
' 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;
}
No exemplo de Visual Basic , as duas instruções cria uma nova instância de Visual Studio IDE. A primeira declaração diretamente cria uma nova instância quando a segunda declaração criar uma nova instância criando uma nova solução.
Para obter uma referência a uma instância existente de Visual Studio o IDE, você pode usar GetObject Function. Você pode fazer um destes procedimentos:
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")