Laden...

[gelöst] VS2005 Add-In selbst erstellen

Erstellt von norman_timo vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.960 Views
norman_timo Themenstarter:in
4.506 Beiträge seit 2004
vor 15 Jahren
[gelöst] VS2005 Add-In selbst erstellen

<Verwendetes System: VS2005 SP 1>

Hallo zusammen,

bin gerade dabei ein VS-Add-In zu schreiben. Soweit eigentlich kein Problem. Wähle neues Projekt-VS-Add-In...

Ich bekomme automatisch durchs Template in der "Connect.cs" die "OnConnection"-Methode bereitgestellt.

Ich habe daraufhin folgende Ergänzung getätigt:


        /// <summary>Implementiert die OnConnection-Methode der IDTExtensibility2-Schnittstelle. Empfängt eine Benachrichtigung, wenn das Add-In geladen wird.</summary>
        /// <param term='application'>Stammobjekt der Hostanwendung.</param>
        /// <param term='connectMode'>Beschreibt, wie das Add-In geladen wird.</param>
        /// <param term='addInInst'>Objekt, das dieses Add-In darstellt.</param>
        /// <seealso class='IDTExtensibility2' />
        public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
        {
            _applicationObject = (DTE2)application;
            _addInInstance = (AddIn)addInInst;
            _applicationObject.Events.BuildEvents.OnBuildDone += new _dispBuildEvents_OnBuildDoneEventHandler(BuildEvents_OnBuildDone);
        }

        /// <summary>
        /// Behandelt das Ereignis <see cref="E:thumbsup:nBuildDone"/>.
        /// </summary>
        /// <param name="Scope">Definiert den aktuellen, kontextbezogenen Rahmen.</param>
        /// <param name="Action">Definiert die aktuelle Aktion.</param>
        private void BuildEvents_OnBuildDone(vsBuildScope Scope, vsBuildAction Action)
        {
            System.Diagnostics.Debug.WriteLine("BuildEvents_OnBuildDone");
        }

Das Ganze lässt sich jetzt auch debuggen. Dazu startet er eine neue VS-Instanz, und ein Breakpoint in der "OnConnected" Methode wird auch angelaufen, und auch das Event registriert.

Jetzt zu meinem Problem:
Ein Haltepunkt in der Event-Behandlungsmethode "BuildEvents_OnBuildDone" wird nicht angelaufen und es erfolgt auch hier keine Debug-Ausgabe. Das Event scheint nie gefeuert zu werden, obwohl ich verschiedene Rebuilds/Builds/Clean etc. Vorgänge gemacht habe.

Kann das jemand nachvollziehen, und wie komme ich nun zu dem "OnBuildDone" Ereignis?

Grüße
Norman-Timo

Edit: Titelstatus auf gelöst gesetzt

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

X
2.051 Beiträge seit 2004
vor 15 Jahren

versuch mal folgendes. erstelle eine private variable, welche deine BuildEvents speichert. an diese Instance wird dann deine EventHandler gebunden.



private  <**BUILDEVENTSTYP**> buildEvents; 

public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
        {
            _applicationObject = (DTE2)application;
            _addInInstance = (AddIn)addInInst;
            buildEvents = applicationObject.Events.BuildEvents;
            buildEvents.OnBuildDone += new _dispBuildEvents_OnBuildDoneEventHandler(BuildEvents_OnBuildDone);
        }

norman_timo Themenstarter:in
4.506 Beiträge seit 2004
vor 15 Jahren

Hallo Xqgene,

hey klasse, das war wohl ein sehr guter Hinweis. Ich bin beim besten Willen nicht davon ausgegangen, dass das Registrieren des Ereignises "out of scope" läuft und vom GC aufgeräumt wird.

Mit der privaten Variable klappt es wunderbar, ich danke Dir für die Hilfe.

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

X
2.051 Beiträge seit 2004
vor 15 Jahren

Hallo Xqgene,
...Ich bin beim besten Willen nicht davon ausgegangen, dass das Registrieren des Ereignises "out of scope" läuft und vom GC aufgeräumt wird.

was glaubst du, wie lange habe ich bei dem problemchen meiner zeit gesucht?! 8o 😁