无法在Visual Studio 2012中使用AddNamedCommand2注册命令

本文关键字:AddNamedCommand2 注册 命令 2012 Visual Studio | 更新日期: 2023-09-27 18:22:24

我目前正在将以前的VBE宏移植到Visual Studio 2012。由于VBE不再可用,您需要实现一个自定义加载项。到目前为止没有问题。

这就是我创建C#插件的地方,它实现了IDTExtensibility2和IDTCommandTarget。在OnConnection方法中,我注册了应该在启动Visual Studio时执行的命令

devenv [parameters...] /Command:AddIn.Connect.MakeMeProud

在遇到各种问题后,我实现了一个助手例程,它在VisualStudio:中注册命令

    private const String CommandMain = "AddIn";
    private void registerCommand(String Name, ref object[] ctguid)
    {
        String cmd = CommandMain + ".Connect." + Name;
        int disableFlags = (int)vsCommandStatus.vsCommandStatusSupported +
                (int)vsCommandStatus.vsCommandStatusEnabled;
         _applicationObject.Commands.AddNamedCommand(_addInInstance, cmd, Name, Name, false, 0, ref ctguid, disableFlags);
    }
    private void registerCommands()
    {
        object[] contextGUIDS = new object[]{};
        registerCommand("MakeMeProud", ref contextGUIDS);
    }
    private void unregisterCommands()
    {
        foreach (Command cmd in (_applicationObject.Commands))
        {
            try
            {
                if (cmd.Name.StartsWith(CommandMain + ".Connect."))
                    cmd.Delete();
            }
            catch { }
        }
    }

函数registerCommand()在删除现有命令后在OnConnection中调用:

    public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
    {
        _applicationObject = (DTE2)application;
        _addInInstance = (AddIn)addInInst;
        if ((ext_ConnectMode.ext_cm_AfterStartup == connectMode) ||
             (ext_ConnectMode.ext_cm_Startup == connectMode) ||
             (ext_ConnectMode.ext_cm_CommandLine == connectMode))
        {
            unregisterCommands();
            registerCommands();
        }                    
    }

但当我加载加载项时,Visual Studio在调用AddNamedCommand时会抱怨出现System.InvalidArgumentException(当我使用AddNamedCcommand2时也是如此)。

有什么建议吗?

我不想在Tools中有任何条目,只想从命令行和命令窗口运行它。

:(

无法在Visual Studio 2012中使用AddNamedCommand2注册命令

发现错误。

您需要仅按名称注册命令,而不按类。在Query和Exec中,您也可以比较类名。

错误消息没有太大帮助,但使用调试器检查另一个Addin帮助很大。

干杯。

相关文章:
  • 没有找到相关文章