Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Aggiornamento: novembre 2007
In alcuni casi è utile creare a livello di codice una nuova istanza di Visual Studio o collegarsi a un'istanza specifica di Visual Studio già in esecuzione. Se in un sistema sono in esecuzione due istanze di Visual Studio con la stessa soluzione aperta, ad esempio in un'istanza è in corso la compilazione di una soluzione e nell'altra è in corso una build di debug, è possibile programmare il componente aggiuntivo in modo da differenziarle.
È ad esempio possibile:
Avviare un'istanza di Visual Studio in base a un percorso di un file o di una soluzione.
Collegarsi a un'istanza di Visual Studio in base a un percorso di un file o di una soluzione.
Caricare un file o una soluzione in un'istanza esistente di Visual Studio.
Creare una nuova istanza di Visual Studio in cui l'istanza viene chiusa quando:
Creare una nuova istanza di Visual Studio in cui l'istanza rimane caricata anche quando:
È possibile eseguire il cast degli oggetti restituiti sui rispettivi oggetti, ad esempio DTE2 e Solution2.
Nota: |
|---|
Le finestre di dialogo e i comandi di menu visualizzati potrebbero non corrispondere a quelli descritti nella Guida in linea in quanto dipendono dall'edizione o dalle impostazioni attive. Queste routine sono state sviluppate con le Impostazioni generali per lo sviluppo attive. Per modificare le impostazioni, scegliere Importa/EsportaImpostazioni dal menu Strumenti. Per ulteriori informazioni, vedere Impostazioni di Visual Studio. |
Esempio
Per creare una nuova istanza di Visual Studio, utilizzare Funzione CreateObject (Visual Basic) oppure System.Activator.CreateInstance. Quando si utilizza la funzione CreateObject in Visual Basic, è possibile passare valori di "VisualStudio.DTE.8.0" o "VisualStudio.Solution.8.0." . Negli esempi riportati di seguito vengono illustrati questi tre metodi.
' 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;
}
Nell'esempio relativo a Visual Basic entrambe le istruzioni creano una nuova istanza dell'IDE di Visual Studio. La prima istruzione crea direttamente una nuova istanza, mentre la seconda crea una nuova istanza creando una nuova soluzione.
Per ottenere un riferimento a un'istanza esistente dell'IDE di Visual Studio, è possibile utilizzare Funzione GetObject (Visual Basic). È possibile eseguire una delle seguenti operazioni:
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")
Vedere anche
Concetti
Registrazione di un componente aggiuntivo
Nota: