2016-12-06 117 views
-1

我正在處理擴展名,並且必須刪除自定義命令然後重新添加它。現在,當我嘗試運行擴展程序時,出現錯誤提示Visual Studio擴展 - 已經有一個命令處理程序菜單命令

菜單命令已經有一個命令處理程序。

有沒有人遇到過這個?任何想法如何解決?我試着創建一個新的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

我認爲你需要添加代碼示例。否則這根本無法再現 – rbr94

+1

根本不可能提供任何信息。很可能你沒有刪除現有的命令 - 你檢查了任何錯誤代碼嗎?結果?至少張貼您用於刪除命令的代碼 –

+0

根據您的代碼,似乎可以,請創建一個新項目並將相關代碼複製到使用新Guid的新項目。檢查它是否有效。 –

回答

1

您是否嘗試過重置實驗實例?開始菜單中應該有一個批處理文件,標題爲Reset the Visual Studio 2015 Experimental Instance。運行它,它會確保一切都恢復到默認狀態。我猜這裏發生的事情是,你改變了你的擴展包的標識符,新的和前一個一起安裝,它仍然爲你試圖添加的命令提供一個處理程序。