Procedura: rispondere a eventi di riferimenti Web (Visual C#)
Aggiornamento: novembre 2007
Gli eventi di ambiente definiti in VSLangProj e VSLangProj80 sono specifici dei progetti Visual C#, Visual Basic e Visual J#. VSLangProjWebReferencesEvents è un nuovo tipo di Visual Studio 2005 che viene generato quando si aggiunge o si rimuove un riferimento Web oppure quando si modificano le relative proprietà in un progetto Visual Basic, Visual C# o Visual J#.
Nell'esempio riportato di seguito viene utilizzato Visual C# per connettere i metodi di gestione degli eventi per un progetto specifico utilizzando la proprietà VSLangProjWebReferencesEvents.
Nota: |
---|
È possibile che le finestre di dialogo e i comandi di menu visualizzati siano diversi da quelli descritti nella Guida in linea a seconda delle impostazioni attive o della versione in uso. Queste procedure sono state sviluppate con le Impostazioni generali per lo sviluppo attive. Per modificare le impostazioni, scegliere Importa/esporta impostazioni dal menu Strumenti. Per ulteriori informazioni, vedere Impostazioni di Visual Studio. |
Per gestire gli eventi correlati ai riferimenti Web mediante Visual C#
Creare un progetto di componente aggiuntivo Visual Studio in Visual C#.
Scegliere Aggiungi riferimento dal menu Progetto, quindi nella scheda .NET selezionare il primo progetto VSLangProj e VSLangProj80 e scegliere OK.
Aggiungere using VSLangProj; e using VSLangProj80; all'inizio del file Connect.cs.
Nella classe Connect inizializzare una variabile alla gestione dell'oggetto VSLangProjWebReferencesEvents.
private DTE2 _applicationObject; private AddIn _addInInstance; private VSLangProj80.VSLangProjWebReferencesEvents webRefEvents;
In questo esempio la variabile è denominata webRefEvents.
Altri oggetti nel modello di automazione relativi ad altri tipi di eventi specifici del progetto. Quando ad esempio si aggiunge o si rimuove un'istruzione import da un insieme Imports, viene generato ImportsEvents. BuildManagerEvents può essere applicato agli eventi relativi agli assembly temporanei generati dagli output degli strumenti personalizzati. Per ulteriori informazioni sull'oggetto BuildManager, vedere Introduzione all'oggetto BuildManager. Per un elenco completo degli eventi specifici dei tipi di progetti, vedere Oggetti di eventi (specifici dei tipi di progetto). Per un elenco degli eventi di automazione generici, vedere Oggetti degli eventi di automazione.
Al metodo OnConnection aggiungere la chiamata al metodo riportata di seguito.
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) { _applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; // Call the WebReferenceEventsSample method. WebReferenceEventsSample (_applicationObject); }
Aggiungere la dichiarazione del metodo WebReferenceEventsSample riportata di seguito direttamente sotto al metodo OnConnection con le dichiarazioni seguenti.
public void WebReferenceEventsSample(DTE2 dte) { Solution2 soln = (Solution2)_applicationObject.Solution; Project proj; VSProject2 vsproj; String webServiceRef; proj = soln.Projects.Item(1); }
Quando si esegue questo esempio, con la dichiarazione proj = soln.Projects.Item(1); è necessario aprire un progetto nell'ambiente di sviluppo integrato (IDE) di Visual Studio. In particolare, il progetto deve essere di tipo Visual Basic, Visual C# o Visual J# perché l'oggetto VSLangProjWebReferencesEvents è specifico di questi tipi di progetto.
Eseguire il cast del progetto su un oggetto VSProject2 aggiungendo il codice riportato di seguito al metodo WebReferenceEventsSample.
// Get a reference to the VSProject2 object. vsproj = (VSProject2)proj.Object;
Recuperare gli oggetti dell'evento dal modello di automazione nel metodo WebReferenceEventsSample.
webRefEvents = vsproj.Events2.VSLangProjWebReferencesEvents;
Nel metodo WebReferenceEventsSample connettere i gestori degli eventi.
webRefEvents.OnAfterWebReferenceAdded += new _dispVSLangProjWebReferencesEvents_OnAfterWebReferenceAddedEventHandler (webRefEvents_OnAfterWebReferenceAdded); webRefEvents.OnBeforeWebReferenceRemoved += new _dispVSLangProjWebReferencesEvents_OnBeforeWebReferenceRemovedEventHandler (webRefEvents_OnBeforeWebReferenceRemoved); webRefEvents.OnWebReferenceChanged += new _dispVSLangProjWebReferencesEvents_OnWebReferenceChangedEventHandler (webRefEvents_OnWebReferenceChanged);
Nel metodo WebReferenceEventsSample aggiungere un riferimento a un servizio Web nel progetto.
// Add a Web reference to the folder. // Replace the "<web reference>" with an actual Web service. MessageBox.Show("Adding a Web reference.", "Information"); webServiceRef = "<web reference>"; vsproj.AddWebReference(webServiceRef);
Per aggiungere un riferimento a un servizio Web in un progetto a livello di codice, è necessario sostituire il testo segnaposto <web reference> nel codice con l'URL di un servizio Web reale.
Questa operazione comporta la generazione dell'evento OnAfterWebReferenceAdded al momento dell'esecuzione del componente aggiuntivo in oggetto.
Aggiungere le routine correlate a ciascun oggetto dell'evento sotto al metodo WebReferenceEventsSample.
void webRefEvents_OnWebReferenceChanged(object pDispatch) { MessageBox.Show("A Web reference was changed."); } void webRefEvents_OnBeforeWebReferenceRemoved(object pDispatch) { MessageBox.Show("A Web reference was removed."); } void webRefEvents_OnAfterWebReferenceAdded(object pDispatch) { MessageBox.Show("A Web reference was added." + pDispatch.Name); }
Infine, per evitare che dopo la chiusura del componente aggiuntivo Visual Studio rallenti le prestazioni del computer a causa del costante monitoraggio degli eventi relativi alle finestre, disabilitare la gestione degli eventi nel metodo OnDisconnection.
public void OnDisconnection(ext_DisconnectMode disconnectMode, ref Array custom) { // If the delegate handlers have been connected, then // disconnect them here. // If you do not do this, the handlers may still // fire because garbage collection has not removed them. if (webRefEvents != null) { webRefEvents.OnAfterWebReferenceAdded -= new _dispVSLangProjWebReferencesEvents _OnAfterWebReferenceAddedEventHandler (webRefEvents_OnAfterWebReferenceAdded); webRefEvents.OnBeforeWebReferenceRemoved -= new _dispVSLangProjWebReferencesEvents _OnBeforeWebReferenceRemovedEventHandler (webRefEvents_OnBeforeWebReferenceRemoved); webRefEvents.OnWebReferenceChanged -= new _dispVSLangProjWebReferencesEvents _OnWebReferenceChangedEventHandler (webRefEvents_OnWebReferenceChanged); } }
Il codice completo è disponibile nella sezione Esempio del presente argomento.
Scegliere Genera soluzione dal menu Genera per generare il componente aggiuntivo.
Aprire un progetto Visual C#, Visual J# o Visual Basic nell'ambiente di sviluppo integrato (IDE, Integrated Development Environment) di Visual Studio.
Scegliere Gestione componenti aggiuntivi dal menu Strumenti e selezionare il componente aggiuntivo nella finestra di dialogo Gestione componenti aggiuntivi. Scegliere OK per eseguire il componente aggiuntivo.
Per eseguire il test della gestione degli eventi di VSLangProjWebReferencesEvents
L'evento OnAfterWebReferenceAdded viene generato una volta al momento dell'esecuzione del componente aggiuntivo perchè nell'esempio viene aggiunto un riferimento a livello di codice a un servizio Web.
Per eseguire il test dell'evento OnWebReferenceChanged:
Espandere la cartella Riferimenti Web in Esplora soluzioni.
Selezionare il servizio Web e fare clic su di esso con il pulsante destro del mouse.
Scegliere Proprietà dal menu a discesa.
Nella finestra Proprietà modificare il comportamento dell'URL da dinamico in statico scegliendo Static dalla casella combinata Comportamento URL.
Per eseguire il test dell'evento OnBeforeWebReferenceRemoved:
Selezionare il servizio Web e fare clic su di esso con il pulsante destro del mouse.
Scegliere Elimina dal menu a discesa.
Esempio
Nell'esempio seguente viene utilizzato un componente aggiuntivo di base di Visual Studio per illustrare come rispondere agli eventi dei riferimenti Web mediante l'automazione Visual Studio.
using System;
using Extensibility;
using EnvDTE;
using EnvDTE80;
using VSLangProj;
using VSLangProj2;
using VSLangProj80;
using System.Windows.Forms;
namespace MyAddin
{
public class Connect : Object, IDTExtensibility2
{
public Connect()
{
}
public void OnConnection(object application,
ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
// Call the WebReferenceEventsSample method.
WebReferenceEventsSample(_applicationObject);
}
public void WebReferenceEventsSample(DTE2 dte)
{
try
{
Solution2 soln =
(Solution2)_applicationObject.Solution;
Project proj;
VSProject2 vsproj;
String webServiceRef;
proj = soln.Projects.Item(1);
// Get a reference to the VSProject2 object.
vsproj = (VSProject2)proj.Object;
//Connect Web references events.
webRefEvents =
vsproj.Events2.VSLangProjWebReferencesEvents;
webRefEvents.OnAfterWebReferenceAdded +=new
_dispVSLangProjWebReferencesEvents
_OnAfterWebReferenceAddedEventHandler
(webRefEvents_OnAfterWebReferenceAdded);
webRefEvents.OnBeforeWebReferenceRemoved += new
_dispVSLangProjWebReferencesEvents
_OnBeforeWebReferenceRemovedEventHandler
(webRefEvents_OnBeforeWebReferenceRemoved);
webRefEvents.OnWebReferenceChanged += new
_dispVSLangProjWebReferencesEvents
_OnWebReferenceChangedEventHandler
(webRefEvents_OnWebReferenceChanged);
// Create a Web references folder.
MessageBox.Show("Creating a Web references folder."
, "Information");
vsproj.CreateWebReferencesFolder();
// Add a Web reference to the folder.
// Replace the "<web reference>" with an
// actual Web service URL.
MessageBox.Show("Adding a Web reference."
, "Information");
webServiceRef = "<web reference>";
vsproj.AddWebReference(webServiceRef);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
void webRefEvents_OnWebReferenceChanged(object pDispatch)
{
MessageBox.Show("A Web reference was changed.");
}
void webRefEvents_OnBeforeWebReferenceRemoved(object pDispatch)
{
MessageBox.Show("A Web reference was removed.");
}
void webRefEvents_OnAfterWebReferenceAdded(object pDispatch)
{
MessageBox.Show("A Web reference was added.");
}
public void OnDisconnection(ext_DisconnectMode disconnectMode,
ref Array custom)
{
// If the delegate handlers have been connected, then
// disconnect them here.
// If you do not do this, the handlers may still
// fire because garbage collection has not removed them.
if (webRefEvents != null)
{
webRefEvents.OnAfterWebReferenceAdded -= new
_dispVSLangProjWebReferencesEvents
_OnAfterWebReferenceAddedEventHandler
(webRefEvents_OnAfterWebReferenceAdded);
webRefEvents.OnBeforeWebReferenceRemoved -= new
_dispVSLangProjWebReferencesEvents
_OnBeforeWebReferenceRemovedEventHandler
(webRefEvents_OnBeforeWebReferenceRemoved);
webRefEvents.OnWebReferenceChanged -= new
_dispVSLangProjWebReferencesEvents
_OnWebReferenceChangedEventHandler
(webRefEvents_OnWebReferenceChanged);
}
}
public void OnAddInsUpdate(ref Array custom)
{
}
public void OnStartupComplete(ref Array custom)
{
}
public void OnBeginShutdown(ref Array custom)
{
}
private DTE2 _applicationObject;
private AddIn _addInInstance;
private VSLangProj80.VSLangProjWebReferencesEvents webRefEvents;
}
}
Compilazione del codice
Per compilare il codice, creare un nuovo progetto aggiuntivo Visual Studio e in Visual C# sostituire il codice della classe Connect con il codice riportato nell'esempio. Per ulteriori informazioni sull'esecuzione di un componente aggiuntivo, vedere Procedura: controllare i componenti aggiuntivi con Gestione componenti aggiuntivi.
Vedere anche
Attività
Procedura: rispondere a eventi di riferimenti Web (Visual Basic)