我已经得到了依赖于其他解决方案的项目存在一个设计师。如果这些项目中的一个被删除的设计师崩溃,你必须编辑为XML来修复。不完全的用户友好。

我做,然而,有代表的Visual Studio实例DTE对象,以及所述ProjectItems我依赖

是否有可能,某处DTE的深处,注册一个侦听该项目项的删除?而且,如果是的话,我将如何做呢?

有帮助吗?

解决方案

它看起来像这里的罪魁祸首是垃圾收集。我发现以下两个事件集相同地表现。

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;

其他提示

查核此FAQ文章其解释了如何为ProjectItems事件(包括ItemDeleted)寄存器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top