Visual Studio 扩展 - 已经有一个菜单命令的命令处理程序

问题描述 投票:0回答:2

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

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

以前有人遇到过这个吗?有什么想法如何修复吗?我尝试过创建一个新的 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);
        }
    }

在命令上Service.AddCommand(menuItem);当我尝试从 Visual Studio 中的菜单调用不同的命令时。

再次感谢您的帮助!

c# visual-studio-2015 visual-studio-extensions vsix
2个回答
1
投票

您是否尝试过重置实验实例?您的开始菜单中应该有一个名为

Reset the Visual Studio 2015 Experimental Instance
的批处理文件。运行它,它将确保所有内容都重置回默认状态。我猜这里发生的事情是您更改了扩展包的标识符,并且新扩展包与前一个扩展包一起安装,它仍然为您尝试添加的命令提供处理程序。


0
投票

我最近遇到了同样的问题,这是由打字错误引起的。不幸的是,Visual Studio 提供的错误消息信息不多。它没有显示与我传递给继承的构造函数的类相关的简单异常,而是显示消息:

“菜单命令已经有一个命令处理程序”:256。'

此消息在这种情况下并不是特别有帮助......

不正确

[Command(PackageIds.YamlReader)]
internal sealed class YamlReader : BaseCommand<Yamlwriter>

正确:

[Command(PackageIds.YamlReader)]
internal sealed class YamlReader : BaseCommand<YamlReader>
© www.soinside.com 2019 - 2024. All rights reserved.