【发布时间】: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