![](/img/trans.png)
[英]Add Windows Explorer context menu options to Visual Studio context menu
[英]visual studio extension (VSPackage) add items to Test Explorer context menu
我正在使用VSPackage编写Visual Studio 2012的扩展。 我需要在“测试资源管理器”中添加一个上下文菜单项,然后单击此菜单项,就需要获取所选的单元测试。 我尝试使用添加项目
((CommandBars)DTE.CommandBars)["Test Window Context Menu"].Controls.Add(Type: MsoControlType.msoControlButton);
并通过订阅事件来添加事件处理程序
DTE.Events.CommandBarEvents[command].Click
我成功将一个项目添加到上下文菜单,但是Click事件处理程序从未被触发。 MSDN说,我需要将命令的OnAction属性设置为有效的字符串值,以使Click事件处理程序被触发。 它也不起作用。
然后,我发现我需要通过VSPackage中的VSCT文件添加命令。 但是,我找不到“测试窗口上下文”菜单,因此无法将命令附加到它。 另外,我需要获取“测试资源管理器”中列出的所有单元测试(TestCase对象)。
任何帮助是极大的赞赏!
通常这些是我在寻找Visual Studio Shell GUID或命令,上下文菜单,组等ID的文件:
实际上,它们包含在您新创建的.vsct文件(<Extern href =“ vsshlids.h” />)的顶部。 我想您已经检查过了。 我进行了快速搜索,但是发现“测试”只是一个功能区和一个测试对话框。 可能现在您正在寻找。 对于某人找到此帖子可能仍然有用。
您可能还想尝试一下蛮力风格:在程序文件(x86)\\ Visual Studio [VERSION]中搜索正则表达式:^#define。* TEST。* $这将为您提供包含TEST的定义。
另外,您可能需要考虑直接询问Microsoft。
我编写了一些探索性代码来遍历该上下文菜单中的命令。 我还尝试注册优先级命令目标并查看获得的GUID组和命令ID。 该上下文菜单的GUID似乎为{1e198c22-5980-4e7e-92f3-f73168d1fb63}
。 您可能可以使用它通过.vsct文件添加命令,而无需使用DTE.CommandBars动态添加它。
这是我的实验代码,列出了该上下文菜单中当前命令的GUID和命令ID,以防它对任何人有所帮助。
var bars = ((Microsoft.VisualStudio.CommandBars.CommandBars)DTE.CommandBars);
var teContextMenu = bars["Test Window Context Menu"];
var ctls = teContextMenu.Controls;
foreach (var ctl in ctls)
{
var cmdCtl = ctl as Microsoft.VisualStudio.CommandBars.CommandBarControl;
string guid; int id;
DTE.Commands.CommandInfo(ctl, out guid, out id);
Debug.WriteLine($"{cmdCtl?.accName} {guid} {id}");
}
关于命令路由的这篇文章对我有所帮助: https : //docs.microsoft.com/zh-cn/visualstudio/extensibility/internals/command-routing-algorithm
我的实验性优先级命令目标(在其中设置断点以查看发送了什么GUID和命令ID)已注册如下。 TestCommandInterceptor类是IOleCommandTarget的基本实现。
var cmdService = GetService(typeof(SVsRegisterPriorityCommandTarget)) as IVsRegisterPriorityCommandTarget;
var target = new TestCommandInterceptor();
cmdService.RegisterPriorityCommandTarget(0, target, out _testCmdInterceptorRegistrationCookie);
我仍然想知道该问题第二部分有关如何确定所选测试的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.