![]() |
||||
|
If two unrelated add-ins add buttons with Command.AddControl to the same Visual Studio .NET built-in command bar (such the "Tools" commandbar), when you unload one of them through the Add-In Manager and it removes the button that it added, it is loaded again. Cause This is a bug of Visual Studio .NET. More Information Steps to reproduce the problem:
<GuidAttribute("CEFCC4FC-B2D6-490A-9893-0509F682FB5B"), _
ProgIdAttribute("TestAddin.Connect")> _
Public Class Connect
Implements Extensibility.IDTExtensibility2
Implements EnvDTE.IDTCommandTarget
Private Const m_COMMAND_NAME As String = "Test"
Private m_objDTE As EnvDTE.DTE
Private m_objAddin As AddIn
Private m_objCommandBarControl As CommandBarControl
Public Sub OnConnection(ByVal application As Object, _
ByVal connectMode As Extensibility.ext_ConnectMode, _
ByVal addInInst As Object, ByRef custom As System.Array) _
Implements Extensibility.IDTExtensibility2.OnConnection
Dim objCommandBar As CommandBar
Dim objCommand As Command
m_objDTE = CType(application, EnvDTE.DTE)
m_objAddin = CType(addInInst, AddIn)
Select Case connectMode
Case ext_ConnectMode.ext_cm_UISetup
objCommand = m_objDTE.Commands.AddNamedCommand( _
m_objAddin, m_COMMAND_NAME, "Test", "Test", True, 59)
Case ext_ConnectMode.ext_cm_AfterStartup, ext_ConnectMode.ext_cm_Startup
objCommand = m_objDTE.Commands.Item(m_objAddin.ProgID & "." & m_COMMAND_NAME)
objCommandBar = m_objDTE.CommandBars.Item("Tools")
m_objCommandBarControl = objCommand.AddControl(objCommandBar)
m_objCommandBarControl.Visible = True
End Select
End Sub
Public Sub OnDisconnection(ByVal RemoveMode As Extensibility.ext_DisconnectMode, _
ByRef custom As System.Array) _
Implements Extensibility.IDTExtensibility2.OnDisconnection
Select Case RemoveMode
Case ext_DisconnectMode.ext_dm_HostShutdown, ext_DisconnectMode.ext_dm_UserClosed
If Not (m_objCommandBarControl Is Nothing) Then
m_objCommandBarControl.Delete()
End If
End Select
End Sub
Public Sub Exec(ByVal cmdName As String, ByVal executeOption As vsCommandExecOption, _
ByRef varIn As Object, ByRef varOut As Object, ByRef handled As Boolean) _
Implements IDTCommandTarget.Exec
handled = True
End Sub
Public Sub QueryStatus(ByVal cmdName As String, _
ByVal neededText As vsCommandStatusTextWanted, _
ByRef statusOption As vsCommandStatus, ByRef commandText As Object) _
Implements IDTCommandTarget.QueryStatus
If neededText = EnvDTE.vsCommandStatusTextWanted.vsCommandStatusTextWantedNone Then
If cmdName = m_objAddin.ProgID & "." & m_COMMAND_NAME Then
statusOption = CType(vsCommandStatus.vsCommandStatusEnabled + _
vsCommandStatus.vsCommandStatusSupported, vsCommandStatus)
Else
statusOption = vsCommandStatus.vsCommandStatusUnsupported
End If
End If
End Sub
Public Sub OnBeginShutdown(ByRef custom As System.Array) _
Implements Extensibility.IDTExtensibility2.OnBeginShutdown
End Sub
Public Sub OnAddInsUpdate(ByRef custom As System.Array) _
Implements Extensibility.IDTExtensibility2.OnAddInsUpdate
End Sub
Public Sub OnStartupComplete(ByRef custom As System.Array) _
Implements Extensibility.IDTExtensibility2.OnStartupComplete
End Sub
End Class
This problem does not happen if the add-ins add their buttons to the different command bars. Go back to the 'Resources for Visual Studio .NET extensibility' section for more articles like this
|
|||||||||||||||||||||||||||||||||||||||||||||||||