2016-01-27 13 views
5

Gibt es die Möglichkeit, Code auszuführen, wenn der Code beim Ausführen von Visual Studio gestoppt wird?Reagieren auf Visual Studio Beenden

Ich benutze die CefGlue-Bibliothek, um eine WinForms-Anwendung zu erstellen, und erkannte, dass Probleme beim Drücken der Stop-Schaltfläche von Exception bis zu zwei Fenstern ohne Inhaltseröffnung auftreten. Ein separater Prozess wird weiterhin im Hintergrund ausgeführt. Um Cef schön zu stoppen, muss ich CefRuntime.Shutdown(); durchführen Vielleicht ist das, weil es nicht die Anwendung in einem Visual Studio-Hosting-Prozess ausführt, weil CefGlue ein Problem damit hat (siehe this). Dies hat zwar keinen Einfluss auf die Produktion, ist aber beim Entwickeln und Testen unangenehm, aber ich möchte dennoch etwas Code ausführen, um das Problem zu beheben.

Ich würde vermuten, das ist nicht möglich, aber wenn es war, wäre es interessant zu wissen.

Also ich bin auf der Suche nach einer Möglichkeit, etwas Code auszuführen, wenn Visual Studio die Anwendung beim Drücken der Stop-Taste während der Entwicklung stoppt.

Hinweis: ich Visual Studio 2013 und 2015

bearbeiten Das Problem bin mit nicht reproduzierbar mit sehr wenigen Zeilen Code. Trotzdem habe ich versucht, ein vereinfachtes Beispiel here

+0

Welche Art von Anwendung bauen Sie? – MikeS159

+0

Ich baue eine WinForms-Anwendung. – Sjoerd222888

+1

Ich würde sagen, Sie sollten ein Formular schließen Ereignis haben, das alle Threads löscht, bevor das Programm ordnungsgemäß beendet wird, aber das wird nicht aufgerufen, wenn Sie es in Visual Studio beenden. Mir ist nicht aufgefallen, dass VS Teile des Programms vorher nicht schließen konnte. Können Sie den Code veröffentlichen, in dem der Prozess ausgeführt wird, der weiterhin ausgeführt wird? – MikeS159

Antwort

1

Was Ihr basicly suchen zu schaffen, ist eine Lösung, die das Visual Studio SDK.

Sie können Ihre eigenen Add-Ins erstellen, indem Sie die IDTExtensibility interface implementieren. In der Funktion OnConnection können Sie verschiedene Ereignisse abonnieren. Mit (DTE2)application können Sie auf a lot of things von VS zugreifen.

Sie müssen einige der Ereignisse abonnieren, die von der Events property erhalten werden können.

Sie müssen selbst herausfinden, welche Ereignisse für Ihre Lösung am besten geeignet sind. Aber die DebuggerEvents scheint wie ein guter Anfang zu sein.

Dies erfordert einige Untersuchungen, bevor Sie es verwenden können. Es wird wahrscheinlich leichtere Lösungen geben.

Als einfaches Beispiel für die OnConnection:

public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) 
{ 
    var applicationObject = (DTE2)application; 

    var events = _applicationObject.Events; 
    var buildEvents = (BuildEvents)events.BuildEvents; 
    buildEvents.OnBuildBegin += new _dispBuildEvents_OnBuildBeginEventHandler(OnBuildBegin); 
} 

Dies wird ausgelöst, wenn ein Build gestartet wird. Die verfügbare Dokumentation ist nicht sehr gut, daher wird es einige Versuche und Fehler erfordern, bevor Sie das finden, was Sie brauchen.

Verwandte Themen