【问题标题】:Visual Studio Extension - There is already a command handler for the menu commandVisual Studio 扩展 - 菜单命令已经有一个命令处理程序
【发布时间】:2016-12-06 13:10:30
【问题描述】:

我正在开发一个扩展,不得不删除一个自定义命令然后重新添加它。现在,当我尝试运行扩展程序时,我收到一条错误消息

菜单命令已经有一个命令处理程序。

以前有人遇到过这种情况吗?任何想法如何解决?我尝试创建一个新的 GUID 并更改 commandId,但没有成功。

错误输出:发生“System.ArgumentException”类型的异常 在 System.Design.dll 中,但未在用户代码中处理

附加信息:已经有一个命令处理程序 菜单命令 '4fd442a6-1a00-47ee-b98d-f11b0faafbe2 : 256'。

来自 vsct 文件:

 <GuidSymbol  name="guidVSProximityMenuPackageCmdSet3" value="{4FD442A6-1A00-47EE-B98D-F11B0FAAFBE2}">

  <IDSymbol name="ProximityProjectExplorerGroup" value="4128" />
  <IDSymbol value="256" name="cmdidGetNugetVersionCommand" />

 </GuidSymbol>

来自 command.cs 文件:

/// <summary>
    /// Command ID.
    /// </summary>
    public const int CommandId = 256;

    /// <summary>
    /// Command menu group (command set GUID).
    /// </summary>
    public static readonly Guid CommandSet = new Guid("4FD442A6-1A00-47EE-B98D-F11B0FAAFBE2");

此方法抛出异常(位于 command.cs 文件中)

/// <summary>
    /// Initializes a new instance of the <see cref="GetNugetVersionCommand"/> class.
    /// Adds our command handlers for menu (commands must exist in the command table file)
    /// </summary>
    /// <param name="package">Owner package, not null.</param>
    private GetNugetVersionCommand(Package package)
    {
        if (package == null)
        {
            throw new ArgumentNullException("package");
        }

        this.package = package;

        OleMenuCommandService commandService = this.ServiceProvider.GetService(typeof(IMenuCommandService)) as OleMenuCommandService;
        if (commandService != null)
        {
            var menuCommandID = new CommandID(CommandSet, CommandId);
            var menuItem = new MenuCommand(this.MenuItemCallback, menuCommandID);
            commandService.AddCommand(menuItem);
        }
    }

关于 commandService.AddCommand(menuItem);当我尝试从 Visual Studio 的菜单中调用不同的命令时行。

再次感谢您的帮助!

【问题讨论】:

  • 我认为您需要添加代码示例。否则这根本无法重现
  • 在没有信息的情况下无法提供帮助。很可能您没有删除现有命令 - 您是否检查过任何错误代码?结果?至少发布您用来删除命令的代码
  • 根据你的代码,好像没问题,请新建一个项目,将相关代码复制到新项目,使用新的Guid。检查它是否有效。
  • 如果问题仍然存在,请分享一个简单的演示,可以通过 OneDrive 重现问题。
  • @ColeWu-MSFT 感谢您的建议。如果可能的话,我会尽量避免这样做,但我会作为最后的手段。我真的很想弄清楚为什么会这样。

标签: c# visual-studio-2015 visual-studio-extensions vsix


【解决方案1】:

您是否尝试过重置实验实例?在您的开始菜单中应该有一个名为Reset the Visual Studio 2015 Experimental Instance 的批处理文件。运行它,它将确保一切都重置为默认状态。我猜这里发生的事情是您更改了扩展包的标识符,并且新的扩展包与前一个包一起安装,它仍然为您尝试添加的命令提供处理程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 2019-07-01
    • 2015-06-23
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 2022-01-02
    相关资源
    最近更新 更多