我创建了a Visual Studio extension,在右键单击两个位置时出现的上下文菜单中添加了两个条目:解决方案资源管理器中的项目,以及打开的代码编辑器窗口中的任何位置。
我遇到的问题是,在代码编辑器窗口中单击时不显示菜单条目如果正在编辑的文件是SELECT * FROM Movies WHERE(movie_date BETWEEN movie_date AND NOW()) ORDER BY views DESC LIMIT 5
文件(单击时会显示)但是在解决方案资源管理器中。对于我测试的任何其他文件类型,它可以正常工作。
以下是我如何定义.cshtml
文件中的菜单条目:
.vsct
菜单条目在命令构造函数中创建为<Groups>
<Group guid="guidBrowseInRemoteGitRepoCommandPackageCmdSet"
id="MyMenuGroup" priority="0x0600">
<Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_ITEMNODE"/>
</Group>
<Group guid="guidBrowseInRemoteGitRepoCommandPackageCmdSet"
id="MyMenuGroup" priority="0x0600">
<Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_CODEWIN"/>
</Group>
</Groups>
<Buttons>
<Button guid="guidBrowseInRemoteGitRepoCommandPackageCmdSet"
id="BrowseInRemoteGitRepoCommandId" priority="0x0100" type="Button">
<Parent guid="guidBrowseInRemoteGitRepoCommandPackageCmdSet" id="MyMenuGroup" />
<Icon guid="guidImages" id="bmpPicGit" />
<CommandFlag>DynamicVisibility</CommandFlag>
<Strings>
<ButtonText>Browse in remote repository</ButtonText>
</Strings>
</Button>
<Button guid="guidBrowseInRemoteGitRepoCommandPackageCmdSet"
id="CopyRemoteGitRepoUrlCommandId" priority="0x0100" type="Button">
<Parent guid="guidBrowseInRemoteGitRepoCommandPackageCmdSet" id="MyMenuGroup" />
<Icon guid="guidImages" id="bmpPicGit" />
<CommandFlag>DynamicVisibility</CommandFlag>
<Strings>
<ButtonText>Copy URL of remote repository version</ButtonText>
</Strings>
</Button>
</Buttons>
的实例:
OleMenuCommand
var commandService = this.ServiceProvider.GetService(typeof(IMenuCommandService))
as OleMenuCommandService;
if (commandService == null) return;
var browseMenuCommandID = new CommandID(CommandSet, BrowseCommandId);
var browseMenuItem = new OleMenuCommand(BrowseMenuItemCallback, browseMenuCommandID);
browseMenuItem.BeforeQueryStatus += MenuItemOnBeforeQueryStatus;
commandService.AddCommand(browseMenuItem);
//same for the other entry
将MenuItemOnBeforeQueryStatus
sender
和Visible
设为真或假。
那么,我在这里错过了什么?
修改
为了完整性,以下是我需要在Enabled
文件中进行的更改,以实现the change suggested by Carlos Quintero:
1)在.vsct
内添加了以下内容:
<Symbols>
2)在<GuidSymbol name="guidCshtmlCodeEditor" value="{78F03954-2FB8-4087-8CE7-59D71710B3BB}" />
内添加了以下内容:
<Groups>
答案 0 :(得分:0)
为.cshtml文件显示了不同的上下文菜单。
如果您使用EnableVSIPLogging注册表值(HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ VisualStudio \ 14.0 \ General),如旧文章所述:
您会看到有两种不同的上下文菜单正在使用中。
.CS文件使用:
Guid = {D309F791-903F-11D0-9EFC-00A0C911004F}
GuidID = 4
CmdID = 1037
Type = 0x00000400
Flags = 0x00000000
NameLoc = Code Window
和.CSHTML文件使用:
Guid = {78F03954-2FB8-4087-8CE7-59D71710B3BB}
GuidID = 395
CmdID = 1
Type = 0x00000400
Flags = 0x00000000
NameLoc = HTML Context
因此您需要相应地修改.vsct文件。