我创建了一个Visual Studio扩展,将两个条目添加到右键单击两个位置时出现的上下文菜单中:解决方案资源管理器中的项目以及打开的代码编辑器窗口中的任何位置。
我面临的问题是,如果要编辑的.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
为true或false适当。
那么,我在这里想念的是什么?
编辑:
为了完整起见,这是我需要在.vsct
文件中执行以实现Carlos Quintero建议的更改的更改:
1)在内部添加以下内容<Symbols>
:
<GuidSymbol name="guidCshtmlCodeEditor" value="{78F03954-2FB8-4087-8CE7-59D71710B3BB}" />
2)在内部添加以下内容<Groups>
:
<Group guid="guidBrowseInRemoteGitRepoCommandPackageCmdSet" id="MyMenuGroup" priority="0x0600">
<Parent guid="guidCshtmlCodeEditor" id="IDM_VS_TOOL_STANDARD"/>
</Group>
.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文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句