2010-05-14 17 views
3

다른 솔루션 항목의 존재에 의존하는 디자이너가 있습니다. 해당 항목 중 하나가 삭제되면 디자이너가 충돌하고 수정할 XML로 수정해야합니다. 사용자 친화적이지 않습니다.DTE를 통해 ProjectItem 삭제를 어떻게들을 수 있습니까?

그러나 Visual Studio의 인스턴스를 나타내는 DTE 개체와 내가 의존하는 ProjectItem이 있습니다.

DTE의 깊이 어딘가에서 해당 ProjectItem 삭제를위한 수신기를 등록 할 수 있습니까? 그리고 만약 그렇다면 어떻게 할 수 있습니까?

답변

3

여기에 범인이 가비지 수집 인 것처럼 보입니다. 다음 두 이벤트 세트가 동일하게 작동하는 것을 발견했습니다.

Events2 events2 = dte.Events as Events2; 
if (events2 != null) 
{ 
    this.projectItemsEvents = events2.ProjectItemsEvents; 
    this.projectItemsEvents.ItemAdded += this.ProjectItemsEvents_ItemAdded; 
    this.projectItemsEvents.ItemRemoved += this.ProjectItemsEvents_ItemRemoved; 
    this.projectItemsEvents.ItemRenamed += this.ProjectItemsEvents_ItemRenamed; 
} 

this.csharpProjectItemsEvents = 
    dte.Events.GetObject("CSharpProjectItemsEvents") as ProjectItemsEvents; 
if (this.csharpProjectItemsEvents != null) 
{ 
    this.csharpProjectItemsEvents.ItemAdded += this.CSharpProjectItemsEvents_ItemAdded; 
    this.csharpProjectItemsEvents.ItemRemoved += this.CSharpProjectItemsEvents_ItemRemoved; 
    this.csharpProjectItemsEvents.ItemRenamed += this.CSharpProjectItemsEvents_ItemRenamed; 
} 

두 키의 키는 구독자의 이벤트 개체에 대한 참조를 유지해야합니다. 일단 참조를 추가하면 예상대로 작동합니다.

private ProjectItemsEvents projectItemsEvents; 
private ProjectItemsEvents csharpProjectItemsEvents; 
1

ProjectItems 이벤트 (ItemDeleted 포함) 등록 방법을 설명하는 this FAQ article을 확인하십시오.

+0

제대로 작동하지 못했지만, 가능한 한 가까이에 있습니다. – Will