Visual Studio扩展 - 菜单命令

时间:2016-12-06 13:10:31

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

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

  

菜单命令已有命令处理程序。

有没有人遇到过这个?任何想法如何解决?我已经尝试创建一个新的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中的菜单调用不同的命令时。

再次感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

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