This one happens when an add-in:
– Creates a temporary toolbar using CommandBars.Add
– Creates a temporary CommandBarPopup on that toolbar
– Creates a command and tries to add a CommandBarButton from that command to that CommandBarPopup using Command.Add(CommandBarPopup.CommandBar)
The bug report is here:
VS 2010 Beta 2 Bug: adding CommandBarButton from Command to CommandbarPopup on Toolbar causes VS to hang
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=503871
The (VB.NET) code to reproduce the problem 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 _myCommandBarToolbar As CommandBar
Private _myCommandBarPopup 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()
Const MY_COMMAND_NAME As String = "MyCommand"
Dim command As Command = Nothing
Dim commandBars As CommandBars
Dim commandBarControlObject As Object
Try
commandBars = CType(_applicationObject.CommandBars(), CommandBars)
_myCommandBarToolbar = commandBars.Add(Name:="My toolbar", Position:=MsoBarPosition.msoBarTop)
' Create a commandbar popup
_myCommandBarPopup = CType(_myCommandBarToolbar.Controls.Add(Type:=MsoControlType.msoControlPopup), CommandBarPopup)
_myCommandBarPopup.Caption = "My CommandBarPopup"
' Try to retrieve existing command
Try
command = _applicationObject.Commands.Item(_addInInstance.ProgID & "." & MY_COMMAND_NAME)
Catch ex As Exception
End Try
' Create command
If command Is Nothing Then
command = _applicationObject.Commands.AddNamedCommand(_addInInstance, MY_COMMAND_NAME, "My command", "My tooltip", True, 59)
End If
' This line hangs VS 2010 Beta 2
commandBarControlObject = command.AddControl(_myCommandBarPopup.CommandBar)
Catch ex As Exception
System.Windows.Forms.MessageBox.Show(ex.ToString)
End Try
End Sub
Public Sub OnDisconnection(ByVal disconnectMode As ext_DisconnectMode, ByRef custom As Array) Implements IDTExtensibility2.OnDisconnection
Try
If Not _myCommandBarPopup Is Nothing Then
_myCommandBarPopup.Delete()
End If
If Not _myCommandBarToolbar Is Nothing Then
_myCommandBarToolbar.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
End Class