Побочный эффект на VS addin уже установлен, при установке / деинсталляции дополнительного пакета VS - PullRequest
1 голос
/ 04 октября 2011

Я заметил, что во время установки продукта пакета VS (например, http://www.continuoustests.com/) devenv.exe запускается, и я замечаю, что иногда загружается мое дополнение VS (его метод OnConnection()называется), и это может спровоцировать сбой.

Проблема примерно в иногда , так как я не могу воспроизвести условия, когда загружается мой VS-надстройка.Из моего журнала сбоев я знаю, что это происходит редко, только с VS2010 devenv.exe, и я также знаю, что он не зависит от архитектуры машины x86 / x64.Я попытался установить / деинсталлировать дополнительные надстройки, на которых не запущен экземпляр VS, или запущены экземпляры VS, VS2008 или VS2010.

Кто-нибудь знает, как воспроизвести проблему при загрузке моего надстройки VS?

Кстати, я уверен, что есть решение этой проблемы, поскольку в OnConnection() у меня уже есть подобный код ...

     switch (connectMode) {
        case ext_ConnectMode.ext_cm_External:   // This setting is no longer used by Visual Studio.   (http://msdn.microsoft.com/en-us/library/extensibility.ext_connectmode%28v=vs.80%29.aspx)
        case ext_ConnectMode.ext_cm_CommandLine:// The add-in was loaded from the command line, don't support it so far
        case ext_ConnectMode.ext_cm_UISetup:    // addin loaded for the first time, we don't need it  (http://msmvps.com/blogs/carlosq/archive/2008/10/13/the-onconnection-method-and-ext-connectmode-ext-cm-uisetup-of-visual-studio-add-ins.aspx)
           return;

        case ext_ConnectMode.ext_cm_AfterStartup:
        case ext_ConnectMode.ext_cm_Startup:
        case ext_ConnectMode.ext_cm_Solution:
           break;
     }

... но однажды OnStartupComplete() вызываетсяназад, я забыл проверить значение connectMode, которое я получил в OnConnection(), следовательно, сбой.В любом случае, возможность воспроизвести ошибку успокоит меня в этом исправлении.

1 Ответ

0 голосов
/ 10 октября 2011

Обновление: 10 октября 2011

После дополнительных испытаний и отзывов пользователей, которые повторяют проблему, похоже, что моя теория была неверной: connectMode на самом деле находится в диапазоне [ext_cm_AfterStartup, ext_cm_Startup, ext_cm_Solution].

Проблема возникает только с VS2010 и связана с тем, что надстройка не имеет элемента пользовательского интерфейса, провоцируя что-то вроде dte.MainWindow, или HwndSource.FromHwnd(new IntPtr(mainWindow.HWnd)).RootVisual, чтобы быть нулевым.

Я разговаривал с Карлосом Кинтеро http://msmvps.com/blogs/carlosq/,, мировым экспертом по надстройке VS, который никогда не наблюдал этот случай. VS2010 не должен загружать надстройки в сценарии установки / удаления расширения VS, и, похоже, это происходит случайно или, более вероятно, в неизвестных и редких условиях.

Я добавлю еще одну try/catch, чтобы обойти еще одну VS2010 надстройку :(

...