Como responder a eventos de referências Web (Visual C#)
Os eventos de ambiente definidos em VSLangProj e em VSLangProj80 são específicos dos projetos Visual C# ou Visual Basic. VSLangProjWebReferencesEvents é um novo tipo em Visual Studio 2005. É gerado quando uma referência Web é adicionada ao projeto do Visual Basic ou do Visual C#ou removida dele, ou quando suas propriedades são modificadas nele.
Este exemplo usa Visual C# para conectar métodos de manipulação de eventos para um projeto específico usando a propriedade de VSLangProjWebReferencesEvents.
Dica
Seu computador pode mostrar diferentes nomes ou localizações para alguns dos elementos de interface do usuário Visual Studio nas instruções a seguir.A edição do Visual Studio que você possui e as configurações que você usa determinam esses elementos.Para obter mais informações, consulte Personalizando configurações de desenvolvimento no Visual Studio.
Para manipular eventos relacionados às referências Web usando Visual C#
Criar um Visual Studio projeto de suplemento no Visual C#.
No menu Projeto, clique em Adicionar Referência, clique na guia .NET, selecione os primeiros VSLangProj e VSLangProj80 e clique em OK.
Adicione using VSLangProj; e using VSLangProj80; ao cabeçalho do arquivo Connect.cs.
Na classe Conectar, inicialize uma variável para manipular o objeto VSLangProjWebReferencesEvents.
private DTE2 _applicationObject; private AddIn _addInInstance; private VSLangProj80.VSLangProjWebReferencesEvents webRefEvents;
Nesse exemplo, a variável é chamada webRefEvents.
Outros objetos no modelo de automação relacionam com a outros tipos de eventos que são específicos do projeto. Por exemplo, ImportsEvents é gerado quando uma importação é adicionada ou removida de uma coleção Imports. BuildManagerEvents se aplica a eventos relacionados aos assemblies compilados temporários de saída de ferramentas personalizadas. Para obter mais informações sobre o objeto BuildManager, consulte Introdução ao objeto BuildManager Para obter uma lista completa dos eventos específicos de tipos de projetos, consulte Objetos de evento (específicos a tipos de projetos). Para obter uma lista de eventos gerais de automação, consulte Objetos de eventos de automação.
Adicione a seguinte chamada de método ao método 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); }
Adicione a declaração do método WebReferenceEventsSample diretamente abaixo do método OnConnection com as seguintes declarações.
public void WebReferenceEventsSample(DTE2 dte) { Solution2 soln = (Solution2)_applicationObject.Solution; Project proj; VSProject2 vsproj; String webServiceRef; proj = soln.Projects.Item(1); }
A declaração proj = soln.Projects.Item(1); requer que um projeto seja aberto no ambiente de desenvolvimento integrado do Visual Studio (IDE) quando você executa esse exemplo. Em particular, o projeto deve ser um projeto do Visual Basic ou do Visual C# porque o objeto VSLangProjWebReferencesEvents é específico desses tipos de projeto.
Converta o projeto para um objeto VSProject2 adicionando o seguinte código ao método WebReferenceEventsSample.
// Get a reference to the VSProject2 object. vsproj = (VSProject2)proj.Object;
Recupere os objetos de evento do modelo de automação no método WebReferenceEventsSample.
webRefEvents = vsproj.Events2.VSLangProjWebReferencesEvents;
No método WebReferenceEventsSample, conecte os manipuladores de eventos.
webRefEvents.OnAfterWebReferenceAdded += new _dispVSLangProjWebReferencesEvents_OnAfterWebReferenceAddedEventHandler (webRefEvents_OnAfterWebReferenceAdded); webRefEvents.OnBeforeWebReferenceRemoved += new _dispVSLangProjWebReferencesEvents_OnBeforeWebReferenceRemovedEventHandler (webRefEvents_OnBeforeWebReferenceRemoved); webRefEvents.OnWebReferenceChanged += new _dispVSLangProjWebReferencesEvents_OnWebReferenceChangedEventHandler (webRefEvents_OnWebReferenceChanged);
No método WebReferenceEventsSample, adicione uma referência feita a um serviço Web ao projeto.
// 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);
Para adicionar uma referência a um serviço Web para o projeto de forma programática, você deve substituir o texto do espaço reservado, <web reference>, no código com a URL de um serviço Web real.
Esta etapa faz com que o evento OnAfterWebReferenceAdded seja acionado quando você executa esse suplemento.
Adicione procedimentos para cada evento relativo ao objeto de evento abaixo do método 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); }
Por fim, para impedir que o Visual Studio reduza a velocidade do seu sistema ao continuar a monitorar eventos relacionados a janela depois de fechar o suplemento, desabilite a manipulação de eventos no método 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); } }
O código completo é listado na seção Exemplo deste tópico.
Para compilar o suplemento, clique em Compilar Solução no menu Compilação.
Abra um projeto de Visual C# ou Visual Basic no ambiente de desenvolvimento integrado (IDE) do Visual Studio.
No menu de Ferramentas , clique Gerenciador de Suplementos, e selecione o suplemento da caixa de diálogo Gerenciador de Suplementos . Clique OK para executar o suplemento.
Para testar a manipulação de eventos VSLangProjWebReferencesEvents
O evento OnAfterWebReferenceAdded dispara quando você executa o suplemento, pois o exemplo adiciona uma referência a um serviço Web por meio de programação.
Para testar o evento OnWebReferenceChanged:
Expanda a pasta Referências da Web no Gerenciador de Soluções.
Selecione o serviço Web e clique com o botão direito nele.
Selecione Propriedades no menu suspenso.
Na janela de Propriedades , altere o comportamento da URL de dinâmico para estático, selecionando Estático na caixa de combinação Comportamento da URL.
Para testar o evento OnBeforeWebReferenceRemoved:
Selecione o serviço Web e clique com o botão direito nele.
Selecione Excluir no menu suspenso.
Exemplo
O exemplo a seguir é um suplemento básico do Visual Studio que demonstra como responder a eventos de referências Web usando a automação do 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;
}
}
Compilando o código
Para compilar este código, crie um novo projeto do suplemento Visual Studio em Visual C# e substitua o código da classe Conectar com o código no exemplo. Para obter informações sobre como executar um suplemento, consulte Como controlar suplementos usando o Gerenciador de Suplementos.
Consulte também
Tarefas
Como responder a eventos de referências Web (Visual Basic)
Outros recursos
Respondendo a eventos de automação
Respondendo a eventos (projetos do Visual Basic e do Visual C#)