Freigeben über


Gewusst wie: Reagieren auf Webverweisereignisse (Visual C#)

Aktualisiert: November 2007

Die in VSLangProj und VSLangProj80 definierten Umgebungsereignisse sind für Visual C#-, Visual Basic- und Visual J#-Projekte spezifisch. VSLangProjWebReferencesEvents ist ein neuer Typ in Visual Studio 2005. Er wird ausgelöst, wenn ein Webverweis hinzugefügt oder entfernt wird oder wenn dessen Eigenschaften in einem Visual Basic-, Visual C#- oder Visual J#-Projekt geändert werden.

In diesem Beispiel wird Visual C# verwendet, um Ereignisbehandlungsmethoden für ein bestimmtes Projekt mithilfe der VSLangProjWebReferencesEvents-Eigenschaft zu verbinden.

Hinweis:

Die angezeigten Dialogfelder und Menübefehle können je nach den aktiven Einstellungen oder der verwendeten Version von den in der Hilfe beschriebenen abweichen. Bei der Entwicklung dieser Verfahren war die Option Allgemeine Entwicklungseinstellungen aktiviert. Wählen Sie im Menü Extras die Option Einstellungen importieren und exportieren aus, um die Einstellungen zu ändern. Weitere Informationen finden Sie unter Visual Studio-Einstellungen.

So behandeln Sie mit Webverweisen verbundene Ereignisse in Visual C#

  1. Erstellen Sie in Visual C# ein Visual Studio-Add-In-Projekt.

  2. Klicken Sie im Menü Projekt auf Verweis hinzufügen, klicken Sie auf die Registerkarte .NET, wählen Sie das erste VSLangProj und VSLangProj80 aus, und klicken Sie dann auf OK.

  3. Fügen Sie am Anfang der Datei Connect.cs using VSLangProj; und using VSLangProj80; ein.

  4. Initialisieren Sie in der Connect-Klasse eine Variable zum Behandeln des VSLangProjWebReferencesEvents-Objekts.

    private DTE2 _applicationObject;
    private AddIn _addInInstance;
    private VSLangProj80.VSLangProjWebReferencesEvents webRefEvents;
    

    In diesem Beispiel hat die Variable den Namen webRefEvents.

    Andere Objekte im Automatisierungsmodell beziehen sich auf andere projektspezifische Ereignistypen. So wird z. B. ImportsEvents ausgelöst, wenn Sie in einer Imports-Auflistung einen Importvorgang hinzufügen oder entfernen. BuildManagerEvents gilt für Ereignisse in Verbindung mit temporären Assemblys, die aus Ausgaben benutzerdefinierter Tools erstellt wurden. Weitere Informationen über das BuildManager-Objekt finden Sie unter Einführung in das BuildManager-Objekt. Eine vollständige Liste der Ereignisse, die für Projekttypen gelten, finden Sie unter Ereignisobjekte (abgestimmt auf Projekttypen). Eine Liste allgemeiner Automatisierungsereignisse finden Sie unter Ereignisobjekte für die Automatisierung.

  5. Fügen Sie der OnConnection-Methode den folgenden Methodenaufruf hinzu.

    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);
    }
    
  6. Fügen Sie die WebReferenceEventsSample-Methodendeklaration direkt unter der OnConnection-Methode mit den folgenden Deklarationen hinzu.

    public void WebReferenceEventsSample(DTE2 dte)
    {
        Solution2 soln = (Solution2)_applicationObject.Solution;
        Project proj;
        VSProject2 vsproj;
        String webServiceRef;
        proj = soln.Projects.Item(1);
    }
    

    Die Deklaration proj = soln.Projects.Item(1); erfordert, dass ein Projekt in der integrierten Entwicklungsumgebung (Integrated Development Environment, IDE) von Visual Studio geöffnet ist, wenn Sie dieses Beispiel ausführen. Hauptsächlich muss es sich bei dem Projekt um ein Visual Basic-, Visual C#- oder Visual J#-Projekt handeln, da das VSLangProjWebReferencesEvents-Objekt für diese Projekttypen spezifisch ist.

  7. Wandeln Sie das Projekt in ein VSProject2-Objekt um, indem Sie der WebReferenceEventsSample-Methode den folgenden Code hinzufügen.

    // Get a reference to the VSProject2 object.
    vsproj = (VSProject2)proj.Object;
    
  8. Rufen Sie die Ereignisobjekte aus dem Automatisierungsmodell in der WebReferenceEventsSample-Methode ab.

    webRefEvents = vsproj.Events2.VSLangProjWebReferencesEvents;
    
  9. Verbinden Sie die Ereignishandler in der WebReferenceEventsSample-Methode.

    webRefEvents.OnAfterWebReferenceAdded += new
     _dispVSLangProjWebReferencesEvents_OnAfterWebReferenceAddedEventHandler
    (webRefEvents_OnAfterWebReferenceAdded);
    webRefEvents.OnBeforeWebReferenceRemoved += new
    _dispVSLangProjWebReferencesEvents_OnBeforeWebReferenceRemovedEventHandler
    (webRefEvents_OnBeforeWebReferenceRemoved);
    webRefEvents.OnWebReferenceChanged += new
     _dispVSLangProjWebReferencesEvents_OnWebReferenceChangedEventHandler
    (webRefEvents_OnWebReferenceChanged);
    
  10. Fügen Sie dem Projekt in der WebReferenceEventsSample-Methode einen Verweis auf einen Webdienst hinzu.

    // 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);
    

    Um dem Projekt programmgesteuert einen Webdienstverweis hinzuzufügen, ersetzen Sie den im Code enthaltenen Platzhaltertext <web reference> durch den URL eines tatsächlichen Webdienstes.

    Dieser Schritt bewirkt, dass das OnAfterWebReferenceAdded-Ereignis ausgelöst wird, sobald Sie dieses Add-In ausführen.

  11. Fügen Sie unterhalb der WebReferenceEventsSample-Methode Prozeduren für jedes auf das Ereignisobjekt bezogene Ereignis hinzu.

    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);
    }
    
  12. Um schließlich zu verhindern, dass Visual Studio nach dem Schließen des Add-Ins durch die fortdauernde Überwachung fensterbezogener Ereignisse die Systemleistung beeinträchtigt, deaktivieren Sie die Ereignisbehandlung in der OnDisconnection-Methode.

    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);
        }
    }
    

    Der vollständige Code wird im Beispielabschnitt dieses Themas aufgelistet.

  13. Um das Add-In zu erstellen, klicken Sie im Menü Erstellen auf Projektmappe erstellen.

  14. Öffnen Sie in der integrierten Entwicklungsumgebung (Integrated Development Environment, IDE) von Visual Studio ein Visual C#-, Visual J#- oder Visual Basic-Projekt.

  15. Klicken Sie im Menü Extras auf Add-In-Manager, und wählen Sie im Dialogfeld Add-In-Manager das Add-In aus. Klicken Sie auf OK, um das Add-In auszuführen.

So testen Sie die VSLangProjWebReferencesEvents-Ereignisbehandlung

  1. Das OnAfterWebReferenceAdded-Ereignis wird einmal ausgelöst, sobald Sie das Add-In ausführen, da ein Verweis auf einen Webdienst im Beispiel programmgesteuert hinzugefügt wird.

  2. So testen Sie das OnWebReferenceChanged-Ereignis

    • Erweitern Sie im Projektmappen-Explorer den Ordner Webverweise.

    • Wählen Sie den Webdienst aus, und klicken Sie mit der rechten Maustaste darauf.

    • Wählen Sie im Dropdownmenü den Befehl Eigenschaften aus.

    • Ändern Sie im Eigenschaftenfenster das URL-Verhalten von dynamisch in statisch, indem Sie im Kombinationsfeld URL-Verhalten die Option Statisch auswählen.

  3. So testen Sie das OnBeforeWebReferenceRemoved-Ereignis

    • Wählen Sie den Webdienst aus, und klicken Sie mit der rechten Maustaste darauf.

    • Wählen Sie im Dropdownmenü den Befehl Löschen aus.

Beispiel

Das folgende Beispiel stellt ein grundlegendes Add-In in Visual Studio dar und veranschaulicht, wie mithilfe der Visual Studio-Automatisierung auf Webverweisereignisse reagiert wird.

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;
    }
}

Kompilieren des Codes

Um diesen Code zu kompilieren, erstellen Sie in Visual C# ein neues Visual Studio-Add-In-Projekt und ersetzen den Code der Connect-Klasse durch den Code im Beispiel. Informationen zum Ausführen eines Add-Ins finden Sie unter Gewusst wie: Steuern von Add-Ins mit dem Add-In-Manager.

Siehe auch

Aufgaben

Gewusst wie: Reagieren auf Webverweisereignisse (Visual Basic)

Weitere Ressourcen

Reagieren auf Automatisierungsereignisse

Reagieren auf Ereignisse (Visual Basic- und Visual C#-Projekte)