无法在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中有任何条目,只想从命令行和命令窗口运行它。
:(
发现错误。
您需要仅按名称注册命令,而不按类。在Query和Exec中,您也可以比较类名。
错误消息没有太大帮助,但使用调试器检查另一个Addin帮助很大。
干杯。