Procedura: rispondere a eventi di riferimenti Web (Visual C#)
Gli eventi di ambiente definiti in VSLangProj e VSLangProj80 sono specifici dei progetti Visual C# o Visual Basic.VSLangProjWebReferencesEvents è un nuovo tipo in 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 o Visual C#.
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 a seconda delle impostazioni attive o dell'edizione del programma.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.Ad esempio, ImportsEvents viene generato quando un'importazione viene aggiunta o rimossa da una raccolta Imports.BuildManagerEvents si applica a eventi correlati ad assembly temporanei compilati da output di 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.
Aggiungere la chiamata al metodo OnConnection 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, deve trattarsi di un progetto Visual Basic o Visual C# 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 Compila soluzione dal menu Compila per compilare il componente aggiuntivo.
Aprire un progetto Visual C# o Visual Basic nell'ambiente di sviluppo integrato (IDE) di Visual Studio.
Scegliere Gestione componenti aggiuntivi dal menu Strumenti, quindi 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 informazioni sull'esecuzione di un componente aggiuntivo, vedere Procedura: controllare i componenti aggiuntivi tramite Gestione componenti aggiuntivi.
Vedere anche
Attività
Procedura: rispondere a eventi di riferimenti Web (Visual Basic)