Aracılığıyla paylaş


Nasıl yapılır: Web Başvuruları Olaylarına Yanıt Verme (Visual C#)

VSLangProj ve VSLangProj80 içinde tanımlanmış ortam olayları Visual C# veya Visual Basic projelerine özgüdür.VSLangProjWebReferencesEvents, Visual Studio 2005 içinde yeni bir türdür.Bir Visual Basic veya Visual C# projesinde özellikleri değiştirildiğinde veya bir Web başvurusu eklendiğinde veya çıkarıldığında söz konusu olur.

Bu örnekte, VSLangProjWebReferencesEvents özelliğini kullanarak belirli bir proje için olay işleme yöntemlerini bağlamak üzere Visual C# kullanılmaktadır.

[!NOT]

Bilgisayarınız, aşağıdaki yönergelerde yer alan Visual Studio kullanıcı arabirimi öğelerinden bazıları için farklı adlar veya konumlar gösterebilir.Sahip olduğunuz Visual Studio sürümü ve kullandığınız ayarlar bu öğeleri belirler.Daha fazla bilgi için bkz. Visual Studio'da Geliştirme Ayarlarını özelleştirme.

Visual C# kullanarak Web başvurularıyla ilgili olayları işlemek için

  1. Visual C# öğesi içinde bir Visual Studio eklenti projesi oluşturun.

  2. Proje menüsünde, Başvuru Ekle'ye tıklayın, .NET sekmesine tıklayın, ilk VSLangProj ve VSLangProj80 öğesini seçin ve Tamama tıklayın.

  3. Connect.cs dosyasının üstüne using VSLangProj; ve using VSLangProj80; ekleyin.

  4. Connect sınıfında bir değişkeni başlatarak VSLangProjWebReferencesEvents nesnesini işlemesini sağlayın.

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

    Bu örnekte, değişken webRefEvents olarak adlandırılır.

    Otomasyon modelindeki diğer nesneler, projeye özel diğer olay türleriyle ilgilidir.Örneğin, bir Imports koleksiyonunda bir dışarı aktarma eklendiğinde veya kaldırıldığında ImportsEvents oluşturulur.BuildManagerEvents, özel araçların çıkışlarından oluşturulan geçici derlemelerle ilgili olaylar için geçerlidir.BuildManager nesnesi hakkında daha fazla bilgi için bkz. BuildManager Nesnesine Giriş.Proje türleri için özel olan olayların tam listesi için bkz: Olay Nesneleri (Projelerin Türlerine Özgü).Genel otomasyon olaylarının bir listesi için bkz Otomasyon Olayı Nesneleri.

  5. Aşağıdaki yöntem çağrısını OnConnection yöntemine ekleyin.

    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. WebReferenceEventsSample yöntemini doğrudan aşağıdaki bildirimleri içeren OnConnection yönteminin altına ekleyin.

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

    Bildirim proj = soln.Projects.Item(1); öğesi, bu örneği çalıştırdığınızda bir projenin Visual Studio tümleşik geliştirme ortamında (IDE) açık olmasını gerektirir.Özellikle, proje Visual Basic veya Visual C# projesi olmalıdır, çünkü VSLangProjWebReferencesEvents nesnesi bu proje türlerine özgüdür.

  7. WebReferenceEventsSample yöntemine aşağıdaki kodu ekleyerek projeyi VSProject2 nesnesine atayın.

    // Get a reference to the VSProject2 object.
    vsproj = (VSProject2)proj.Object;
    
  8. WebReferenceEventsSample yönteminde olay nesnelerini otomasyon modelinden alın.

    webRefEvents = vsproj.Events2.VSLangProjWebReferencesEvents;
    
  9. WebReferenceEventsSample yönteminde olay işleyicilerini bağlayın.

    webRefEvents.OnAfterWebReferenceAdded += new
     _dispVSLangProjWebReferencesEvents_OnAfterWebReferenceAddedEventHandler
    (webRefEvents_OnAfterWebReferenceAdded);
    webRefEvents.OnBeforeWebReferenceRemoved += new
    _dispVSLangProjWebReferencesEvents_OnBeforeWebReferenceRemovedEventHandler
    (webRefEvents_OnBeforeWebReferenceRemoved);
    webRefEvents.OnWebReferenceChanged += new
     _dispVSLangProjWebReferencesEvents_OnWebReferenceChangedEventHandler
    (webRefEvents_OnWebReferenceChanged);
    
  10. WebReferenceEventsSample yönteminde projeye bir Web hizmeti başvurusu ekleyin.

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

    Bir Web hizmetine programsal olarak bir başvuru eklemek için, koddaki <web reference> yer tutucu metnini gerçek bir Web hizmetinin URL'siyle değiştirmelisiniz.

    Bu adım bu eklentiyi çalıştırdığınızda OnAfterWebReferenceAdded olayının ateşlenmesine neden olur.

  11. WebReferenceEventsSample yönteminin altında olay nesnesiyle ilgili her olay için yordamlar ekleyin.

    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. Son olarak, eklentiyi seçtikten sonra Visual Studio öğesinin pencere ile ilgili olayları izlemeye devam ederek sisteminizi yavaşlatmasını önlemek için OnDisconnection yöntemindeki olay yönetimini devre dışı bırakın.

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

    Tam kod bu konunun Örnek bölümünde listelenmiştir.

  13. Eklentiyi derlemek için, Derle menüsünde Çözümü Derle'yi tıklayın.

  14. Visual Studio tümleşik yazılım geliştirme ortamında (IDE) Visual C# veya Visual Basic projesi açın.

  15. Araçlar menüsünde Eklenti Yöneticisi'ni tıklayın ve Eklenti Yöneticisi iletişim kutusundan eklentinizi seçin.Eklentinizi çalıştırmak için Tamam'ı tıklayın.

VSLangProjWebReferencesEvents olay işlemesini sınamak için

  1. Eklentiyi çalıştırdığınızda OnAfterWebReferenceAdded olayı başlar, çünkü örnek bir Web hizmetine program aracılığıyla bir başvuru ekler.

  2. OnWebReferenceChanged olayını test etmek için:

    • Çözüm Gezgini'nde Web Başvuruları klasörünü genişletin.

    • Web hizmetini seçin ve sağ tıklayın.

    • Aşağı açılan menüden Özellikler öğesini seçin.

    • Özellikler penceresinde, URL davranışı birleşik giriş kutusundan Statik seçerek URL davranışını dinamikten statiğe değiştirin.

  3. OnBeforeWebReferenceRemoved olayını test etmek için:

    • Web hizmetini seçin ve sağ tıklayın.

    • Aşağı açılan menüden Sil öğesini seçin.

Örnek

Aşağıdaki örnek, Visual Studio otomasyonu kullanarak, web başvurularının nasıl yanıtlanacağını gösteren temel bir Visual Studio eklentisidir.

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

Kod Derleniyor

Bu kodu derlemek için, Visual C# içinde yeni bir Visual Studio eklentisi projesi oluşturun ve Connect sınıfının kodunu örnekteki kodla değiştirin.Eklenti çalıştırmak hakkında daha fazla bilgi edinmek için bkz. Nasıl yapılır: Eklenti Yöneticisini Kullanarak Eklentileri Denetleme.

Ayrıca bkz.

Görevler

Nasıl yapılır: Web Başvuruları Olaylarına Yanıt Verme (Visual Basic)

Diğer Kaynaklar

Otomasyon Olaylarına Yanıt Verme

Olaylara Yanıt Verme (Visual Basic ve Visual C# Projeleri)