SolutionEvents для Visual Studio 2010 надстройка не запускается - PullRequest
2 голосов
/ 15 марта 2012

Я создаю надстройку Visual Studio 2010 и пытаюсь подключиться к событию при загрузке решения.

По сути, я обнаружил, что SolutionEvents.Opened, похоже, то, что я ищу, однако прослушивание его в OnConnection не похоже на работу:

public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
  applicationObject = (DTE2)application;
  var outputWindow = (OutputWindow)applicationObject.Windows.Item(Constants.vsWindowKindOutput).Object;
  outputWindowPane = outputWindow.OutputWindowPanes.Add("My Pane");
  applicationObject.Events.SolutionEvents.Opened += SolutionEventsOnOpened;
  outputWindowPane.OutputString("Connected");
}

private void SolutionEventsOnOpened()
{
  outputWindowPane.OutputString("SolutionEventsOnOpened");
}

Единственное, что издается, это "Подключено".

Я пытался прослушать SolutionItemsEvents.ItemAdded и SolutionEvents.ProjectAdded, а также они не запускаются.

Должен ли я инициировать события в другом месте? (Обратите внимание, что у меня установлен R #, возможно, известно, что он вызывает проблемы?)

Ответы [ 2 ]

4 голосов
/ 27 ноября 2012

Нашел решение здесь: http://blogs.microsoft.co.il/blogs/kolbis/archive/2007/11/22/hooking-up-to-the-solution-events.aspx

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

    private Events2 m_events;
    private SolutionEvents m_solutionEvents;

, затем в обработчике OnConnection (когда ваш плагин инициализируется) выполните следующее:

    m_application = Application as DTE2;

    m_events = (Events2)m_application.Events;
    m_solutionEvents = m_events.SolutionEvents;

и, наконец, подключите события Opened / AfterClosing решения следующим образом:

    m_solutionEvents.Opened += m_openSolution;
    m_solutionEvents.AfterClosing += m_closeSolution;

Тогда события начнут происходить.

Я предполагаю, что причина для этого заключается в том, что в противном случае объекты Events / SolutionEvents будут изменены или GC'd (или оба; -).

HTH

0 голосов
/ 22 января 2019

При использовании VS2010 при открытии файла .sln, который приводит к запуску нового экземпляра VS2010, стоит отметить, что SolutionEvents.Opened запускается до запуска EventsObj.OnStartupComplete.Поэтому, если вы зарегистрируете SolutionEvents.Opened во время EventsObj.OnStartupComplete, в этой ситуации он не сработает.

Насколько мне известно, все версии VS после 2010 [2012-2019] fire SolutionEvents.Opened после EventsObj.OnStartupComplete уволен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...