2016-01-27 3 views
5

Есть ли возможность запускать код при остановке кода при его запуске из Visual Studio?Реагировать на Visual Studio Stop

Я использую библиотеку CefGlue для создания приложения WinForms и понял, что есть проблемы при нажатии кнопки остановки от Exception до двух окон без открытия содержимого. Отдельный процесс продолжает работать в фоновом режиме. Чтобы прекратить Cef, мне нужно exectue CefRuntime.Shutdown(); Возможно, это связано с тем, что он не запускает приложение в процессе хостинга Visual Studio, потому что у CefGlue есть проблемы с этим (см. this). Это не влияет на производство, но неприятно при разработке и тестировании, но тем не менее я хотел бы выполнить некоторый код, чтобы исправить эту проблему.

Я бы предположил, что это невозможно, но если бы это было, было бы интересно узнать.

Так что я ищу способ выполнить некоторый код, когда Visual Studio останавливает приложение, когда нажимает кнопку остановки во время разработки.

Примечание: Я использую Visual Studio 2013 и 2015

Редактировать Вопрос не воспроизводимые с очень мало строк кода. Тем не менее я попытался создать упрощенный пример here

+0

Какое приложение вы строите? – MikeS159

+0

Я создаю приложение WinForms. – Sjoerd222888

+1

Я собирался сказать, что у вас должно быть событие закрытия формы, которое очищает любые потоки до того, как программа выйдет правильно, но это не вызывается, когда вы останавливаете ее в Visual Studio. Я не сталкивался с тем, что VS не смог закрыть часть программы раньше. Можете ли вы опубликовать код, в котором процесс, который продолжает выполняться, настроен? – MikeS159

ответ

1

Что вы ищете, так это решение с помощью Visual Studio SDK.

Вы можете создавать свои собственные надстройки, внедряя IDTExtensibility interface.

В функции OnConnection вы можете подписаться на различные мероприятия. Используя (DTE2)application, вы можете получить доступ к a lot of things от VS.

Вам необходимо подписаться на некоторые из событий, которые могут быть получены из Events property.

Вам нужно будет выяснить, какие события лучше всего подходят для вашего решения. Но DebuggerEvents показалось бы хорошим местом для начала.

Для этого требуется некоторое исследование, прежде чем вы сможете его использовать. Вероятнее всего, будут более простые решения.

В качестве простого примера для 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); 
} 

Это срабатывает при запуске сборки. Доступная документация невелика, поэтому перед тем, как вы найдете нужную информацию, вам понадобится пробная версия.