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

#visual-studio #visual-studio-2010 #visual-studio-addins

#visual-studio #visual-studio-2010 #visual-studio-addins

Вопрос:

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

Проблема в том, что когда-нибудь, поскольку я не могу воспроизвести условия, в которых загружается мой VS addin. Из моего журнала сбоев я знаю, что это случается редко, только с 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(v=vs.80).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. Кстати, я прочитал статью mztools.com/articles/2008/MZ2008004.aspx это не упоминает случай побочного эффекта при установке / деинсталляции пакета extraVS.

2. Как выглядел (иногда сбой) код?

3. Это просто типичный NullReferenceEx из моего кода!

Ответ №1:

Обновление: 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 addin, который никогда не наблюдал этот случай. VS2010 не должен загружать какие-либо дополнения в сценарии установки / удаления расширения VS, и, похоже, это происходит случайным образом или, что более вероятно, в неизвестных и редких условиях.

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