gpt4 book ai didi

visual-studio - 如何通过 DTE 监听 ProjectItem 的删除?

转载 作者:行者123 更新时间:2023-12-04 03:39:03 26 4
gpt4 key购买 nike

我有一个设计师依赖于其他解决方案的存在。如果其中一项被删除,设计器就会崩溃,您必须以 XML 格式进行编辑才能修复。不完全是用户友好的。

但是,我确实拥有代表 Visual Studio 实例的 DTE 对象,以及我所依赖的 ProjectItems。

是否有可能在 DTE 深处的某个地方注册一个用于删除该 ProjectItem 的监听器?如果是这样,我该怎么做?

最佳答案

看起来罪魁祸首是垃圾收集。我发现以下两个事件集的行为相同。

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;

关于visual-studio - 如何通过 DTE 监听 ProjectItem 的删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2837228/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com