How to: Responder a eventos de referências da Web (Visual C#)
Os eventos de ambiente definidos no VSLangProj e VSLangProj80 são específicas para Visual C# ou Visual Basic projetos. VSLangProjWebReferencesEventsé um novo tipo de Visual Studio 2005. Ele é disparado quando uma referência da Web é adicionada ou removida ou quando suas propriedades são modificadas em um Visual Basic ou Visual C# project.
Este exemplo usa Visual C# para conectar métodos de manipulação de eventos para um projeto específico usando o VSLangProjWebReferencesEvents propriedade.
Observação |
---|
As caixas de diálogo e comandos de menu demonstradas podem ser diferentes daqueles descritos na Ajuda, dependendo das configurações ativas ou configurações de edição. Esses procedimentos foram desenvolvidos com o General Development Settings ativo. Para alterar as configurações, escolha Import and Export Settings sobre o Ferramentas menu. Para obter mais informações, consulte Trabalhando com configurações. |
Para manipular eventos relacionados às referências da Web usando o Visual C#
Criar um Visual Studio projeto de suplemento no Visual C#.
Sobre o projeto menu, clique em Add Reference, clique o .NET , selecione o primeiro VSLangProj e VSLangProj80 e clique em OK.
Adicionar using VSLangProj; e using VSLangProj80; para a parte superior do arquivo Connect. cs.
Na classe Connect, inicializar uma variável para lidar com o VSLangProjWebReferencesEvents objeto.
private DTE2 _applicationObject; private AddIn _addInInstance; private VSLangProj80.VSLangProjWebReferencesEvents webRefEvents;
Neste exemplo, a variável é chamada webRefEvents.
Outros objetos no modelo de automação referem-se a outros tipos de eventos que são específicos para o projeto. Por exemplo, ImportsEvents é disparado quando uma importação é adicionada ou removida de um Imports coleção. BuildManagerEventsaplica-se para eventos relacionados a assemblies temporários criados a partir de saídas de ferramentas personalizadas. Para obter mais informações sobre BuildManager de objeto, consulte Introdução ao objeto BuildManager. Para obter uma lista completa dos eventos que são específicos para tipos de projetos, consulte Objetos de evento (específicas para tipos de projetos). Para obter uma lista de eventos de automação gerais, consulte Objetos de evento de automação.
Adicione a seguinte chamada de método para o 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 de método de WebReferenceEventsSample, diretamente abaixo o 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 é aberto no Visual Studio o ambiente de desenvolvimento integrado (IDE), quando você executar esse exemplo. Em particular, o projeto deve ser um Visual Basic ou Visual C# de projeto porque a VSLangProjWebReferencesEvents o objeto é específico para esses tipos de projeto.
Converter o projeto para um VSProject2 o objeto, adicionando o seguinte código para o método WebReferenceEventsSample.
// Get a reference to the VSProject2 object. vsproj = (VSProject2)proj.Object;
Recupere objetos de evento a partir no método WebReferenceEventsSample, o modelo de automação.
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 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 programaticamente uma referência a um serviço Web ao projeto, você deve substituir o texto de espaço reservado, <web reference>, no código com a URL de um Web service.
Essa etapa faz com que o OnAfterWebReferenceAdded evento seja acionado quando você executar este add-in.
Adicione os procedimentos para cada evento relacionados ao objeto de evento abaixo no 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); }
Finalmente, para evitar Visual Studio da redução do seu sistema, continuando a monitorar eventos de janela depois de fechar o add-in, desabilitar 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 está listado na seção exemplo deste tópico.
Para criar o suplemento, clique em Build Solution sobre o Build menu.
Abrir um Visual C# ou Visual Basic projeto na Visual Studio o ambiente de desenvolvimento integrado (IDE).
No Ferramentas menu, clique em Gerenciador de suplementose selecione o add-in da Gerenciador de suplementos caixa de diálogo. Clique em OK para executar seu suplemento.
Para testar o tratamento de evento VSLangProjWebReferencesEvents
O OnAfterWebReferenceAdded evento é acionado uma vez ao executar o suplemento, porque o exemplo adiciona uma referência a um serviço da Web programaticamente.
Para testar o OnWebReferenceChanged evento:
Expanda o Referências da Web a pasta em Solution Explorer.
Selecione o serviço da Web e clique sobre ela.
Selecione Propriedades no menu drop-down.
No Propriedades janela, alterar o comportamento de URL de selecionando dinâmico para estático por estático da Comportamento URL caixa de combinação.
Para testar o OnBeforeWebReferenceRemoved evento:
Selecione o serviço da Web e clique sobre ela.
Selecione Excluir no menu drop-down.
Exemplo
O exemplo a seguir é um basic Visual Studio add-in que demonstra como responder a eventos de referências da web usando Visual Studio automação.
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 esse código, crie um novo Visual Studio projeto de suplemento no Visual C# e substitua o código da classe de conectar-se com o código de exemplo. Para obter informações sobre como executar um suplemento, consulte Como: controle de Adicionar-</c0>.
Consulte também
Tarefas
How to: Responder a eventos de referências da Web (Visual Basic)
Outros recursos
Respondendo a eventos de automação
Respondendo a eventos (Visual Basic e projetos do Visual C#)