방법: 웹 참조 이벤트에 응답(Visual C#)
업데이트: 2007년 11월
VSLangProj 및 VSLangProj80에 정의된 환경 이벤트는 Visual C#, Visual Basic 및 Visual J# 프로젝트에만 적용됩니다. VSLangProjWebReferencesEvents는 Visual Studio 2005에서 처음 도입된 형식입니다. 이 이벤트는 Visual Basic, Visual C# 또는 Visual J# 프로젝트에서 웹 참조가 추가 또는 제거되거나 웹 참조의 속성이 변경될 때 발생합니다.
이 예제에서는 Visual C#에서 VSLangProjWebReferencesEvents 속성을 사용하여 특정 프로젝트에 대한 이벤트 처리 메서드를 연결합니다.
참고: |
---|
표시되는 대화 상자와 메뉴 명령은 실제 설정이나 버전에 따라 도움말에서 설명하는 것과 다를 수 있습니다. 이러한 절차는 일반 개발 설정을 사용하여 개발되었습니다. 설정을 변경하려면 도구 메뉴에서 설정 가져오기 및 내보내기를 선택합니다. 자세한 내용은 Visual Studio 설정을 참조하십시오. |
Visual C#을 사용하여 웹 참조 관련 이벤트를 처리하려면
Visual C#에서 Visual Studio 추가 기능 프로젝트를 만듭니다.
프로젝트 메뉴에서 참조 추가, .NET 탭을 차례로 클릭하고 처음의 VSLangProj 및 VSLangProj80을 선택한 다음 확인을 클릭합니다.
Connect.cs 파일 맨 위에 using VSLangProj; 및 using VSLangProj80;을 추가합니다.
Connect 클래스에서 VSLangProjWebReferencesEvents 개체를 처리하는 변수를 초기화합니다.
private DTE2 _applicationObject; private AddIn _addInInstance; private VSLangProj80.VSLangProjWebReferencesEvents webRefEvents;
이 예제에서 변수의 이름은 webRefEvents입니다.
자동화 모델의 다른 개체는 프로젝트에 적용되는 다른 이벤트 형식과 연결됩니다. 예를 들어 Imports 컬렉션에 가져오기를 추가하거나 제거하면 ImportsEvents가 발생합니다. BuildManagerEvents는 사용자 지정 도구의 출력에서 빌드된 임시 어셈블리 관련 이벤트에 연관됩니다. BuildManager 개체에 대한 자세한 내용은 BuildManager 개체 소개를 참조하십시오. 여러 형식의 프로젝트에 고유한 이벤트의 전체 목록을 보려면 이벤트 개체(프로젝트 형식별)를 참조하십시오. 일반 자동화 이벤트 목록을 보려면 자동화 이벤트 개체를 참조하십시오.
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); }
OnConnection 메서드 바로 아래에 다음과 같은 WebReferenceEventsSample 메서드 선언을 추가합니다.
public void WebReferenceEventsSample(DTE2 dte) { Solution2 soln = (Solution2)_applicationObject.Solution; Project proj; VSProject2 vsproj; String webServiceRef; proj = soln.Projects.Item(1); }
proj = soln.Projects.Item(1);과 같은 선언을 사용하려면 이 예제를 실행할 때 Visual Studio IDE(통합 개발 환경)에 프로젝트가 열려 있어야 합니다. 특히 프로젝트는 Visual Basic, Visual C# 또는 Visual J# 프로젝트여야 합니다. 이는 VSLangProjWebReferencesEvents 개체가 이들 프로젝트 형식에 고유하기 때문입니다.
WebReferenceEventsSample 메서드에 다음 코드를 추가하여 프로젝트를 VSProject2 개체로 캐스팅합니다.
// Get a reference to the VSProject2 object. vsproj = (VSProject2)proj.Object;
자동화 모델에서 이벤트 개체를 검색하는 코드를 WebReferenceEventsSample 메서드에 추가합니다.
webRefEvents = vsproj.Events2.VSLangProjWebReferencesEvents;
WebReferenceEventsSample 메서드에서 이벤트 처리기를 연결합니다.
webRefEvents.OnAfterWebReferenceAdded += new _dispVSLangProjWebReferencesEvents_OnAfterWebReferenceAddedEventHandler (webRefEvents_OnAfterWebReferenceAdded); webRefEvents.OnBeforeWebReferenceRemoved += new _dispVSLangProjWebReferencesEvents_OnBeforeWebReferenceRemovedEventHandler (webRefEvents_OnBeforeWebReferenceRemoved); webRefEvents.OnWebReferenceChanged += new _dispVSLangProjWebReferencesEvents_OnWebReferenceChangedEventHandler (webRefEvents_OnWebReferenceChanged);
WebReferenceEventsSample 메서드에서 웹 서비스에 대한 참조를 프로젝트에 추가합니다.
// 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);
웹 서비스에 대한 참조를 프로그래밍 방식으로 프로젝트에 추가하려면 코드에서 자리 표시자 텍스트(<web reference>)를 실제 웹 서비스의 URL로 변경해야 합니다.
이 단계를 수행하면 이 추가 기능을 실행할 때 OnAfterWebReferenceAdded 이벤트가 발생합니다.
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); }
마지막으로, 추가 기능을 닫은 후 Visual Studio에서 창 관련 이벤트를 계속 모니터링하여 시스템이 느려지지 않도록 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); } }
전체 코드는 이 항목의 예제 단원에 나와 있습니다.
빌드 메뉴에서 솔루션 빌드를 클릭하여 추가 기능을 빌드합니다.
Visual Studio IDE(통합 개발 환경)에서 Visual C#, Visual J# 또는 Visual Basic 프로젝트를 엽니다.
도구 메뉴에서 추가 기능 관리자를 클릭하고 추가 기능 관리자 대화 상자에서 추가 기능을 선택합니다. 확인을 클릭하여 추가 기능을 실행합니다.
VSLangProjWebReferencesEvents 이벤트 처리를 테스트하려면
예제에서 프로그래밍 방식으로 웹 서비스에 대한 참조를 추가하므로 추가 기능을 실행하면 OnAfterWebReferenceAdded 이벤트가 한 번 발생합니다.
OnWebReferenceChanged 이벤트를 테스트하려면
솔루션 탐색기에서 웹 참조 폴더를 확장합니다.
웹 서비스를 선택하고 마우스 오른쪽 단추로 클릭합니다.
드롭다운 메뉴에서 속성을 선택합니다.
속성 창의 URL 동작 콤보 상자에서 정적을 선택하여 URL 동작을 동적에서 정적으로 변경합니다.
OnBeforeWebReferenceRemoved 이벤트를 테스트하려면
웹 서비스를 선택하고 마우스 오른쪽 단추로 클릭합니다.
드롭다운 메뉴에서 삭제를 선택합니다.
예제
다음 기본 Visual Studio 추가 기능 예제에서는 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;
}
}
코드 컴파일
이 코드를 컴파일하려면 Visual C#에서 새 Visual Studio 추가 기능 프로젝트를 만들고 Connect 클래스의 코드를 예제에 있는 코드로 변경합니다. 추가 기능을 실행하는 방법에 대한 내용은 방법: 추가 기능 관리자를 사용하여 추가 기능 제어를 참조하십시오.
참고 항목
작업
방법: 웹 참조 이벤트에 응답(Visual Basic)