كيف يمكنني الاستماع لحذف ProjectItem عبر DTE؟
-
26-09-2019 - |
سؤال
لدي مصمم يعتمد على وجود عناصر حلول أخرى. إذا تم حذف أحد هذه العناصر ، فسيتعرض المصمم وعليك التعديل كـ XML لإصلاحه. ليس بالضبط سهل الاستخدام.
ومع ذلك ، لدي كائن DTE الذي يمثل مثيل Visual Studio ، وكذلك SoundiEtems التي أعتمد عليها.
هل من الممكن ، في مكان ما في أعماق 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;
نصائح أخرى
الدفع هذا المقال الأسئلة الشائعة وهو ما يشرح كيفية التسجيل في أحداث Prosintiems (بما في ذلك ItemDeleted).
لا تنتمي إلى StackOverflow