Frage

Ich habe einen Designer bekam, die auf die Existenz anderer Lösung Elemente beruht. Wenn eines dieser Elemente die Designer-Abstürze gelöscht und Sie müssen bearbeiten als XML zu beheben. Nicht gerade benutzerfreundlich.

ich jedoch das DTE-Objekt hat die Instanz von Visual Studio darstellt, sowie die ProjectItems ich abhängig bin.

Ist es möglich, irgendwo in den Tiefen des DTE,, registrieren Sie einen Listener für die Löschung dass ProjectItem? Und wenn ja, wie würde ich es tun?

War es hilfreich?

Lösung

Es sieht aus wie hier die Schuldige Garbage Collection ist. Ich fand die folgenden beiden Ereignissätze verhielten sich identisch.

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;
}

Der Schlüssel zu beiden wurde sicherstellen, dass in dem Teilnehmer einen Verweis auf die Ereignisse Objekt zu halten. Sobald ich den Hinweis hinzugefügt, sie verhielten sich wie ich erwartet hatte.

private ProjectItemsEvents projectItemsEvents;
private ProjectItemsEvents csharpProjectItemsEvents;

Andere Tipps

Schauen Sie sich dieser FAQ-Artikel die erklärt, wie für ProjectItems Ereignisse (einschließlich ItemDeleted).

registrieren
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top