Реагируйте на остановку Visual Studio

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

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

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

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

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

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

1 ответ

Решение

В основном вы ищете решение с использованием Visual Studio SDK.

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

в OnConnection Функция вы можете подписаться на разные события. С помощью (DTE2)application Вы можете получить доступ ко многим вещам из VS.

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

Вам нужно выяснить, какие события лучше всего подходят для вашего решения. Но 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);
}

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

Другие вопросы по тегам