Jak: reagowanie na zdarzenia odwołań w sieci Web (Visual C#)
Zdarzenia środowiska, określonych w VSLangProj i VSLangProj80 są specyficzne dla Visual C# lub Visual Basic projektów.VSLangProjWebReferencesEventsjest to nowy typ w Visual Studio 2005.Jest wywoływane, gdy odwołanie sieci Web jest dodane lub usunięte z lub w przypadku, gdy jego właściwości są modyfikowane w Visual Basic lub Visual C# projektu.
W tym przykładzie użyto Visual C# połączyć się przy użyciu metody obsługi zdarzeń dla konkretnego projektu VSLangProjWebReferencesEvents właściwości.
[!UWAGA]
Okien dialogowych i poleceń menu, którą widzisz mogą różnić się od tych opisanych w pomocy, w zależności od tego, aktywne ustawienia lub edition.Procedury te zostały opracowane z ogólnych ustawień rozwoju aktywnych.Aby zmienić ustawienia, wybierz polecenie Importuj i Eksportuj ustawienia na Narzędzia menu.Aby uzyskać więcej informacji, zobacz Visual Studio, ustawienia.
Do obsługi zdarzeń związanych z odniesieniami do sieci Web przy użyciu programu Visual C#
Tworzenie Visual Studio dodatek projektu w Visual C#.
Na Projekt menu, kliknij przycisk Dodaj odwołanie, kliknij przycisk .NET tab, zaznacz pierwszy VSLangProj i VSLangProj80 i kliknij przycisk OK.
Dodaj using VSLangProj; i using VSLangProj80; do początku pliku Connect.cs.
W klasie Połącz Zainicjuj zmienną do obsługi VSLangProjWebReferencesEvents obiektu.
private DTE2 _applicationObject; private AddIn _addInInstance; private VSLangProj80.VSLangProjWebReferencesEvents webRefEvents;
W tym przykładzie zmienna o nazwie webRefEvents.
Innych obiektów w modelu automatyzacji odnoszą się do innych typów zdarzeń, które są specyficzne dla projektu.Na przykład ImportsEvents jest wywoływane, gdy przywóz jest dodane lub usunięte z Imports kolekcji.BuildManagerEventsstosuje się do zdarzeń związanych z zestawów tymczasowych zbudowany z wyjść z narzędzia niestandardowe.Aby uzyskać więcej informacji na BuildManager obiektów, zobacz Wprowadzenie do obiektu, Obiekt BuildManager.Aby uzyskać pełną listę zdarzeń, które są specyficzne dla typów projektów, zobacz Obiekty zdarzeń (szczególne rodzaje projektów).Aby uzyskać listę zdarzeń automatyzacji ogólne, zobacz Obiekty zdarzeń automatyzacji.
Dodaj poniższe wywołanie metody do metody OnConnection.
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); }
Dodaj deklaracja metody WebReferenceEventsSample, bezpośrednio poniżej metody OnConnection z następujących deklaracji.
public void WebReferenceEventsSample(DTE2 dte) { Solution2 soln = (Solution2)_applicationObject.Solution; Project proj; VSProject2 vsproj; String webServiceRef; proj = soln.Projects.Item(1); }
Deklaracja proj = soln.Projects.Item(1); wymaga się, że projekt jest otwarty w Visual Studio zintegrowane środowisko dewelopowania (IDE) uruchomić ten przykład.W szczególności projekt musi być Visual Basic lub Visual C# projektu, ponieważ VSLangProjWebReferencesEvents obiektu jest specyficzny dla tych typów projektów.
Oddania projektu do VSProject2 obiektu, dodając następujący kod do metody WebReferenceEventsSample.
// Get a reference to the VSProject2 object. vsproj = (VSProject2)proj.Object;
Obiekty zdarzeń należy pobierać z modelu automatyzacji w metodzie WebReferenceEventsSample.
webRefEvents = vsproj.Events2.VSLangProjWebReferencesEvents;
W metodzie WebReferenceEventsSample połączenie programów obsługi zdarzeń.
webRefEvents.OnAfterWebReferenceAdded += new _dispVSLangProjWebReferencesEvents_OnAfterWebReferenceAddedEventHandler (webRefEvents_OnAfterWebReferenceAdded); webRefEvents.OnBeforeWebReferenceRemoved += new _dispVSLangProjWebReferencesEvents_OnBeforeWebReferenceRemovedEventHandler (webRefEvents_OnBeforeWebReferenceRemoved); webRefEvents.OnWebReferenceChanged += new _dispVSLangProjWebReferencesEvents_OnWebReferenceChangedEventHandler (webRefEvents_OnWebReferenceChanged);
W metodzie WebReferenceEventsSample Dodaj odwołanie do usługi sieci Web do projektu.
// 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);
Aby programowo dodać odwołanie do usługi sieci Web do projektu, należy zastąpić tekst zastępczy <web reference>, w kodzie za pomocą adresu URL rzeczywiste usługi sieci Web.
W tym kroku powoduje, że OnAfterWebReferenceAdded zdarzenia ognia po uruchomieniu tego dodatku.
Dodawanie procedury dla każdego zdarzenia związane z obiektu zdarzenia poniżej metoda 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); }
Wreszcie Aby zapobiec Visual Studio spowalniały one systemu poprzez kontynuowanie monitorowania zdarzeń związanych z okna, po zamknięciu dodatek, wyłączanie obsługi zdarzeń w metodzie 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); } }
Kompletny kod znajduje się w sekcji przykład tego tematu.
Aby zbudować dodatek, kliknij przycisk Roztwór budować na budować menu.
Otwórz Visual C# lub Visual Basic projektu w Visual Studio zintegrowane środowisko dewelopowania (IDE).
Na Narzędzia menu, kliknij przycisk - w Menedżerzei wybierz dodatek z - W Menedżerze okno dialogowe.Kliknij przycisk OK do uruchomienia dodatku.
Aby przetestować obsługi zdarzeń VSLangProjWebReferencesEvents
OnAfterWebReferenceAdded Zdarzenia uruchamiany po uruchomieniu dodatku, ponieważ w przykładzie dodano odwołanie do usługi sieci Web programowo.
Aby przetestować OnWebReferenceChanged zdarzeń:
Rozwiń węzeł Web odniesienia folderu w Solution Explorer.
Wybierz usługę sieci Web i kliknij go prawym przyciskiem myszy.
Wybierz Właściwości z menu rozwijanego.
Na Właściwości okna, zmienić zachowanie adresu URL na dynamiczne statyczne przez zaznaczenie statyczne z URL zachowanie pola kombi.
Aby przetestować OnBeforeWebReferenceRemoved zdarzeń:
Wybierz usługę sieci Web i kliknij go prawym przyciskiem myszy.
Wybierz usunąć z menu rozwijanego.
Przykład
Poniższy przykład stanowi podstawowy Visual Studio dodatek, który demonstruje, jak odpowiedzieć na sieci web przy użyciu odwołania zdarzenia Visual Studio automatyzacji.
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;
}
}
Kompilowanie kodu
Aby skompilować kod, Utwórz nowy Visual Studio dodatek projektu w Visual C# i Zastąp kod w przykładzie kodu klasy Połącz.Aby uzyskać informacje o sposobach uruchamiania dodatku, zobacz Jak: dodatki formantu przy użyciu dodać Menedżera.
Zobacz też
Zadania
Jak: reagowanie na zdarzenia odwołań w sieci Web (Visual Basic)
Inne zasoby
Reagowanie na zdarzenia automatyzacji
Reagowanie na zdarzenia (Visual Basic i Visual C# projektów)