Porady: odpowiadanie na zdarzenia odwołań sieci Web (Visual C#)
Zdarzenia środowiska, określone w VSLangProj i VSLangProj80 są specyficzne dla projektów Visual C# lub Visual Basic.VSLangProjWebReferencesEvents to nowy typ w Visual Studio 2005.Jest zgłaszany, gdy odwołanie sieci Web jest dodane lub usunięte, lub jego właściwości są modyfikowane w projekcie w języku Visual Basic lub Visual C#.
Ten przykład używa Visual C# do łączenia metod obsługi zdarzeń dla konkretnego projektu przy użyciu właściwości VSLangProjWebReferencesEvents.
[!UWAGA]
Komputer może polazać inne nazwy lub lokalizacje dla niektórych elementów interfejsu użytkownika Visual Studio w dalszych instrukcjach.Te elementy są determinowane przez numer edycji Twojego programu Visual Studio oraz Twoje ustawienia.Aby uzyskać więcej informacji, zobacz Dostosowywanie ustawień środowiska deweloperskiego w Visual Studio.
Do obsługi zdarzeń związanych z odwołaniami sieci Web przy Visual C#
Utwórz projekt dodatku Visual Studio w Visual C#.
W menu Projekt kliknij polecenie Dodaj odwołanie, kliknij kartę .NET, zaznacz pierwsze pozycje VSLangProj i VSLangProj80, a następnie kliknij przycisk OK.
Dodaj using VSLangProj; i using VSLangProj80; na początku pliku Connect.cs.
W klasie Połącz zainicjuj zmienną do obsługi obiektu VSLangProjWebReferencesEvents.
private DTE2 _applicationObject; private AddIn _addInInstance; private VSLangProj80.VSLangProjWebReferencesEvents webRefEvents;
W tym przykładzie zmienna ma nazwę webRefEvents.
Inne obiekty w modelu automatyzacji odnoszą się do innych rodzajów zdarzeń, które są specyficzne dla projektu.Na przykład, obiekt ImportsEvents jest zgłaszany, gdy import jest dodawany lub usuwany z kolekcji Imports.BuildManagerEvents stosuje się do zdarzeń związanych z zestawami tymczasowymi zbudowanymi na podstawie danych wyjściowych narzędzi niestandardowych.Aby uzyskać więcej informacji na temat obiektu BuildManager, zobacz Wprowadzenie do obiektu BuildManager.Aby uzyskać pełną listę zdarzeń, które są specyficzne dla typów projektów, zobacz Obiekty zdarzeń (specyficzne dla typów projektów).Aby uzyskać listę ogólnych zdarzeń automatyzacji, zobacz Obiekty zdarzeń automatyzacji.
Dodaj następujące 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); }
Dodawanie deklaracji metody WebReferenceEventsSample bezpośrednio poniżej metody OnConnection z następującymi deklaracjami.
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, aby projekt był otwarty w zintegrowanym środowisku programistycznym (IDE) Visual Studio podczas uruchomienia tego przykładu.W szczególności projekt musi być w języku Visual Basic lub Visual C#, ponieważ obiekt VSLangProjWebReferencesEvents jest specyficzny dla tych typów projektów.
Przekaż projekt do obiektu VSProject2, dodając następujący kod do metody WebReferenceEventsSample.
// Get a reference to the VSProject2 object. vsproj = (VSProject2)proj.Object;
Pobierz obiekty zdarzenia z modelu automatyzacji w metodzie WebReferenceEventsSample.
webRefEvents = vsproj.Events2.VSLangProjWebReferencesEvents;
W metodzie WebReferenceEventsSample połącz programy 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 dla 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 symbolu zastępczego, <web reference>, w kodzie adresem URL rzeczywistej usługi sieci Web.
Ten krok powoduje wyzwolenie zdarzenia OnAfterWebReferenceAdded po uruchomieniu tego dodatku.
Dodaj procedury dla każdego zdarzenia powiązanego z obiektem zdarzenia poniżej metody 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); }
Na koniec aby zapobiec spowalnianiu przez program Visual Studio systemu poprzez kontynuowanie monitorowania zdarzeń związanych z oknami po zamknięciu dodatku, wyłącz obsługę 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 utworzyć dodatek, kliknij Kompiluj rozwiązanie w menu Kompilacja.
Otwórz projekt w języku Visual C# lub Visual Basic w zintegrowanym środowisku projektowym (IDE) programu Visual Studio.
W menu Narzędzia, kliknij Menedżer dodatkówi wybierz swój dodatek z okna dialogowego Menedżer dodatków.Kliknij OK, aby uruchomić dodatek.
Aby przetestować obsługę VSLangProjWebReferencesEvents
Zdarzenie OnAfterWebReferenceAdded wyzwalane jest raz, po uruchomieniu dodatku, ponieważ przykład programowo dodaje odwołanie do usługi sieci Web.
Aby przetestować zdarzenie OnWebReferenceChanged:
Rozwiń folder Odwołania sieci Web w Eksploratorze rozwiązania.
Wybierz usługę sieci Web i kliknij ją prawym przyciskiem myszy.
Wybierz Właściwości z menu rozwijanego.
W oknie Właściwości zmień zachowanie adresu URL z dynamicznego na statyczne przez zaznaczenie opcji Statyczne w polu kombi Zachowanie adresu URL.
Aby przetestować zdarzenie OnBeforeWebReferenceRemoved:
Wybierz usługę sieci Web i kliknij ją prawym przyciskiem myszy.
Wybierz Usuń z menu rozwijanego.
Przykład
Poniższy przykład to podstawowy dodatek Visual Studio, który demonstruje, jak odpowiadać na zdarzenia odwołań w sieci Web za pomocą automatyzacji 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;
}
}
Kompilowanie kodu
Aby skompilować ten kod, utwórz nowy projekt dodatku Visual Studio w Visual C# i zastąp kod klasy Połącz kodem w przykładzie.Aby uzyskać informacje na temat uruchamiania dodatku, zobacz Porady: kontrolowanie dodatków za pomocą menedżera dodatków.
Zobacz też
Zadania
Porady: odpowiadanie na zdarzenia odwołań sieci Web (Visual Basic)
Inne zasoby
Odpowiadanie na zdarzenia automatyzacji
Odpowiadanie na zdarzenia (projekty Visual Basic oraz Visual C#)