我如何听经DTE一个项目项的缺失?
-
26-09-2019 - |
题
我已经得到了依赖于其他解决方案的项目存在一个设计师。如果这些项目中的一个被删除的设计师崩溃,你必须编辑为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)寄存器。
不隶属于 StackOverflow