Visual studio 我可以将参数/开关/参数传递给VSPackage MenuCommand吗?

Visual studio 我可以将参数/开关/参数传递给VSPackage MenuCommand吗?,visual-studio,envdte,vspackage,Visual Studio,Envdte,Vspackage,我希望这里有人能帮我解决这个问题。我不是最有经验的程序员,但我正在一个项目上取得进展 我需要以编程方式与VisualStudio交互。使用EnvDTE互操作工具取得了一些成功,但似乎我需要在VS中完成一些事情,因此我尝试使用VSPackage MenuCommand来完成各种事情。对不起,这含糊不清 我目前正在成功创建一个带有VSPackage扩展名的自定义MenuCommand,并且能够使用DTE从另一个应用程序以编程方式触发该MenuCommand 我想知道的是:是否可以定义一个MenuCo

我希望这里有人能帮我解决这个问题。我不是最有经验的程序员,但我正在一个项目上取得进展

我需要以编程方式与VisualStudio交互。使用EnvDTE互操作工具取得了一些成功,但似乎我需要在VS中完成一些事情,因此我尝试使用VSPackage MenuCommand来完成各种事情。对不起,这含糊不清

我目前正在成功创建一个带有VSPackage扩展名的自定义MenuCommand,并且能够使用DTE从另一个应用程序以编程方式触发该MenuCommand

我想知道的是:是否可以定义一个MenuCommand,它可以接受从触发外部应用程序传递给它的参数

使用Visual Studio 2012中的VS程序包模板并使用菜单命令选项,我的所有代码都存在于此方法中:

private void MenuItemCallback(object sender, EventArgs e)
    {
        // my code...
    }
显然,有很多其他自动生成的代码将这一切结合在一起,但我所有的代码都存在于这个方法中。有没有一种方法可以改变这个方法,使它允许向它传递参数?一旦我这样做(如果可以的话),我还必须对其他文件做哪些更改来声明/注册这个功能不同的方法

例如:

static void Main(string[] args)    
{
    Type visualStudioType = Type.GetTypeFromProgID("VisualStudio.DTE.11.0");
    DTE dte = Activator.CreateInstance(visualStudioType) as DTE;
    dte.MainWindow.Visible = true;
    dte.ExecuteCommand("myCommand");        
}
这很有效。但我想做的是将最后一个命令更改为:

dte.ExecuteCommand("myCommand", "myArguments");
当我尝试这样做时,我收到以下异常: 命令“myCommand”不接受参数或开关


对不起,我不清楚。任何帮助都将不胜感激。

从外接程序创建的命令默认接受参数

在.vsct文件中定义命令时,从包创建的命令需要指定AllowParams。见:

另请参见此线程:

带参数的命令的IOleComandTarget::exec

然后,它应该可以工作,可以使用dte.ExecuteCommand或dte.Commands.Raise(…)。见:

如何:通过编程将参数从Visual Studio外接程序传递到命令

非常感谢您的回复。我想我的问题并没有明确说明这一点,但我更不知道如何定义一个命令,使其包含参数。比如,我可以成功地将参数传递给接受它们的内置命令,但我已经使用MSDN演练定义了自己的命令,我不知道如何修改它以允许命令接受参数。这有意义吗?再次感谢,我明白了。我已经扩展了我的回答,非常感谢。您的编辑为我提供了足够的信息来保存和解决它。另一个要求是在新创建的OleMenuCommand上设置参数说明。我得到了这个工作。我真的要感谢卡洛斯·昆特罗的回答。虽然它不能直接解决我的问题,但我最终还是找到了我需要做的事情。我仍然不完全理解,但它很可能与模板自动生成作为MenuCommand而不是OleMenuCommand的命令有关。在将其更改为OleMenuCommand并将其EventArgs强制转换为OleMenuCmdEventArgs后,我能够访问保存我随命令传入的参数的InValue。胡萨!