![]() |
||||
|
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
You can code, design, locate code and document your apps much faster using VB.NET, C#, C++ or Visual J#:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||