安装/卸载额外的VS软件包时已经安装的VS插件的副作用

时间:2011-10-04 13:22:33

标签: visual-studio visual-studio-2010 visual-studio-addins

我注意到在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(),我就忘记检查connectModeOnConnection()的值,因此崩溃了。 无论如何能够重现这个错误会让我感到安慰。

1 个答案:

答案 0 :(得分:0)

更新:2011年10月10日

经过更多测试和反复问题的用户的反馈后,我的理论似乎是错误的:connectMode实际上在[ext_cm_AfterStartup, ext_cm_Startup, ext_cm_Solution]范围内。

问题只发生在VS2010上,而且来自于插件没有UI元素,导致dte.MainWindowHwndSource.FromHwnd(new IntPtr(mainWindow.HWnd)).RootVisual之类的内容为空。

我与VS addin的世界专家Carlos Quintero http://msmvps.com/blogs/carlosq/进行了交谈,从未观察到这种情况。 VS2010不应该在VS扩展安装/卸载场景中加载任何插件,它似乎是在未知和罕见的情况下随机发生或更可能发生的。

我将又一个 try/catch来绕过另一个 VS2010插件错误:(