This bug eluded me during several days because there was another bug that already caused VS 2010 Beta 2 to hang, but finally a couple of days ago I realized that was seeing a different issue (no commandbarbutton involved in this new bug) and I was able to isolate and report it today:
VS 2010 Beta 2 Bug: adding CommandBarPopup to CommandbarPopup causes VS to hang if CommandBarPopup was added to Toolbar before
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=507650
As I expressed some days ago, my feeling with VS 2010 so far (after four builds) is that once you patch your add-in to (somehow) bypass a bug, the add-in finds a new one.
The (VB.NET) code to reproduce it is:
Imports System Imports Microsoft.VisualStudio.CommandBars Imports Extensibility Imports EnvDTE Imports EnvDTE80 Public Class Connect Implements IDTExtensibility2 Private _applicationObject As DTE2 Private _addInInstance As AddIn Private _commandBarToolbar As CommandBar Private _commandBarPopupOnToolbar As CommandBarPopup Private _commandBarPopupMenu As CommandBarPopup Private _commandBarPopupOnMenu As CommandBarPopup Public Sub OnConnection(ByVal application As Object, ByVal connectMode As ext_ConnectMode, ByVal addInInst As Object, ByRef custom As Array) Implements IDTExtensibility2.OnConnection _applicationObject = CType(application, DTE2) _addInInstance = CType(addInInst, AddIn) Select Case connectMode Case ext_ConnectMode.ext_cm_AfterStartup InitializeAddIn() Case ext_ConnectMode.ext_cm_Startup ' OnStartupComplete will be called End Select End Sub Public Sub OnStartupComplete(ByRef custom As Array) Implements IDTExtensibility2.OnStartupComplete InitializeAddIn() End Sub Private Sub InitializeAddIn() Dim commandBars As CommandBars Try commandBars = CType(_applicationObject.CommandBars(), CommandBars) If MessageBox.Show("Create toolbar before menu?", "", MessageBoxButtons.YesNo) = DialogResult.Yes Then ' This hangs VS 2010 Beta 2 CreateToolbar(commandBars) CreateMenu(commandBars) Else ' This causes nested menus but doesn’t hang VS 2010 Beta 2 CreateMenu(commandBars) CreateToolbar(commandBars) End If Catch ex As Exception System.Windows.Forms.MessageBox.Show(ex.ToString) End Try End Sub Private Sub CreateToolbar(ByVal commandBars As CommandBars) _commandBarToolbar = commandBars.Add(Name:="My toolbar", Position:=MsoBarPosition.msoBarTop, Temporary:=True) _commandBarPopupOnToolbar = AddCommandBarPopupToCommandBar(_commandBarToolbar, "MyPopupOnToolbar", "My Popup On Toolbar") _commandBarToolbar.Visible = True End Sub Private Sub CreateMenu(ByVal commandBars As CommandBars) Dim menuCommandBar As CommandBar menuCommandBar = commandBars.Item("MenuBar") _commandBarPopupMenu = AddCommandBarPopupToCommandBar(menuCommandBar, "MyPopupMenu", "My Menu") _commandBarPopupOnMenu = AddCommandBarPopupToCommandBar(_commandBarPopupMenu.CommandBar, "MyPopupOnMenu", "My Popup On Menu") _commandBarPopupMenu.Visible = True End Sub Public Sub OnDisconnection(ByVal disconnectMode As ext_DisconnectMode, ByRef custom As Array) Implements IDTExtensibility2.OnDisconnection Try If Not _commandBarPopupOnMenu Is Nothing Then _commandBarPopupOnMenu.Delete() End If If Not _commandBarPopupOnToolbar Is Nothing Then _commandBarPopupOnToolbar.Delete() End If If Not _commandBarPopupMenu Is Nothing Then _commandBarPopupMenu.Delete() End If If Not _commandBarToolbar Is Nothing Then _commandBarToolbar.Delete() End If Catch ex As Exception System.Windows.Forms.MessageBox.Show(ex.ToString) End Try End Sub Public Sub OnAddInsUpdate(ByRef custom As Array) Implements IDTExtensibility2.OnAddInsUpdate End Sub Public Sub OnBeginShutdown(ByRef custom As Array) Implements IDTExtensibility2.OnBeginShutdown End Sub Friend Shared Function AddCommandBarPopupToCommandBar(ByVal objParentCommandBar As CommandBar, _ ByVal sCommandBarName As String, ByVal sCaption As String) As CommandBarPopup Dim objCommandBarPopup As CommandBarPopup = Nothing Dim objCommandBar As CommandBar Dim objCommandBarControl As CommandBarControl Dim iPosition As Integer If Not (objParentCommandBar Is Nothing) Then iPosition = objParentCommandBar.Controls.Count + 1 objCommandBarControl = objParentCommandBar.Controls.Add(Type:=MsoControlType.msoControlPopup, Before:=iPosition) objCommandBarPopup = CType(objCommandBarControl, CommandBarPopup) objCommandBar = objCommandBarPopup.CommandBar If Not (objCommandBar Is Nothing) Then objCommandBar.Name = sCommandBarName objCommandBarPopup.Caption = sCaption End If End If Return objCommandBarPopup End Function End Class