C# 如何获取Visual Studio命令列表?

C# 如何获取Visual Studio命令列表?,c#,visual-studio-2010,vsix,visual-studio-extensions,C#,Visual Studio 2010,Vsix,Visual Studio Extensions,我们正在开发一个VS扩展,它需要一个Visual Studio命令列表,如此屏幕截图中的命令: 选项>键盘“> 例如: 行动。添加 Action.Add.NETFrameworkLaunchCondition Action.AddAction ……等等 我们可以在哪里找到或如何访问此列表?visual studio包含此列表..\Microsoft visual studio 9.0\Common7\IDE\*.vsk您可以通过DTE接口访问它。通过GetService(typeof(SDT

我们正在开发一个VS扩展,它需要一个Visual Studio命令列表,如此屏幕截图中的命令:

选项>键盘“>

例如:

  • 行动。添加
  • Action.Add.NETFrameworkLaunchCondition
  • Action.AddAction
  • ……等等

我们可以在哪里找到或如何访问此列表?

visual studio包含此列表
..\Microsoft visual studio 9.0\Common7\IDE\*.vsk
您可以通过DTE接口访问它。通过
GetService(typeof(SDTE))
(或其他适当的机制)获取EnvDTE.DTE接口,然后:

EnvDTE.DTE dte = ...;
var commands = dte.Commands.Cast<EnvDTE.Command>();

foreach (var command in commands.OrderBy(c => c.Name))
{
    Console.WriteLine(command.Name);
}
EnvDTE.DTE-DTE=。。。;
var commands=dte.commands.Cast();
foreach(commands.OrderBy(c=>c.Name)中的var命令)
{
Console.WriteLine(command.Name);
}

我应该提到,这可能非常慢,因此最好避免…

是Mads Kristensen为其VS VoiceExtension编译的VS命令的一个方便列表。

没有真正的异步版本。EnvDTE API与UI线程密切相关。您可以在后台线程上运行它,但会触发封送返回UI线程线程透明化,这将使代码比正常情况下更慢。归根结底,枚举所有命令实际上是“不做”的事情之一。通常,如果有人要求这样做,我会回击并质问他们为什么需要这样做。