您对Visual Studio 2010的addIn模型中的已知错误有解决方法吗?

时间:2010-06-04 20:47:00

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

在为Visual Studio 2010开发AddIns时,以下行失败:

CommandBarEvents handler = (EnvDTE.CommandBarEvents)m_VSStudio.DTE.Events.get_CommandBarEvents(popup);

更新:忘记告诉m_VSStudio属于DTE2

其中popup的类型为CommandBarPopup(对于它运行的CommandBarControl类型)

该行因此异常而失败:

System.Runtime.InteropServices.COMException (0x80020003): Member not found. (Exception from HRESULT: 0x80020003 (DISP_E_MEMBERNOTFOUND))

完全相同的行在Visual Studio 2008中工作。

该行的目的是获取一个处理clickevents的处理程序,当单击Popup时。

搜索完som后,我找到了这个链接:http://connect.microsoft.com/VisualStudio/feedback/details/524335/events-get-commandbarevents-exception-on-submenus-reproducible-bug-addin

这基本上表明它是一个已知错误,无法修复,因为有一个解决方法。但不幸的是,它没有说明解决方法:(

如果有人对解决方法有好主意,我会非常高兴吗?

我想听点击事件的原因是因为我想在某个条件下显示或隐藏子菜单(CommandBarControl),当你点击一个菜单(CommandBarPopup)时。

因此,使用除click事件之外的其他内容的解决方法也将受到赞赏。

2 个答案:

答案 0 :(得分:1)

Jesper和我在电子邮件中谈到了这一点。他试图做的是确保他创建的弹出菜单的成员在显示之前处于正确的状态。他在CommandBarPopup上使用Click even(在2010年转向WPF时已弃用),以便知道何时需要进行状态更新。我提到这样做的首选方法(即使在2008年)将在他的AddIn类上实现IDtCommandtarget。当需要查找命令状态时,VS shell将调用此方法。它会在所有“常规”时间调用此方法,它会更新命令状态(即,如果需要,在显示菜单之前等待空闲时间等)。转向此方法适用于他的场景,似乎解决了他的问题。

赖安

答案 1 :(得分:0)

令人遗憾的是,“我们的电子邮件通信”和“您找到了解决方法”这一短语被置于一个公共错误中,没有任何迹象表明其工作原理。我怀疑这个人正在尝试做一些与你截然不同的事情(即使他使用相同的事件机制来挂钩),所以也许我们找到了一个更好的方法来做他需要的事情。我想不出任何简单的方法来做你正在做的事情,虽然如果我理解你为什么要做你正在做的事情(即你是否隐藏自己的命令?其他人的命令?到底是什么?)那么也许我们可以想到一些东西。请随时直接给我发邮件,地址是rmolden AT microsoft DOT com,对不起有用。我们也可以跟进我们发现的任何工作,因此它将被互联网记忆机一直捕获。