VSCT菜单项未显示

时间:2019-12-05 20:27:21

标签: visual-studio visual-studio-extensions vsct

Visual Studio 2019 16.5.0预览版1。

我试图让菜单项显示在一个组中或在另一个菜单中。

当前,如果我将菜单项指向IDG_VS_WNDO_OTRWNDWS1,则这些菜单项会显示在Visual Studio的“视图/其他Windows”菜单中,但是如果我尝试将其指向MyMenuGroup,它们就不会出现。该代码将运行,但是菜单项永远不会显示在菜单上。如果我尝试将按钮指向IDM_VS_MENU_EXTENSIONS,它甚至都不会编译,并显示以下错误:

Undefined 'Parent/@id' attribute 'IDM_VS_MENU_EXTENSIONS' in a <Button> element 

下面是我的代码:

<Groups>
  <Group guid="MyGroupMenuSet" id="MyMenuGroup" priority="0x0100">
    <Parent guid="guidSHLMainMenu" id="IDG_VS_WNDO_OTRWNDWS1" />
  </Group>
</Groups>

<Buttons>
  <Button guid="My_ExtVS2019PackageCmdSet" id="cmdidMyWindowCommand" priority="0x0100" type="Button">
    <!-- <Parent guid="guidSHLMainMenu" id="IDG_VS_WNDO_OTRWNDWS1" /> -->
    <Parent guid="MyGroupMenuSet" id="MyMenuGroup" />
    <Strings>
      <ButtonText>My Main Window</ButtonText>
    </Strings>
  </Button>
  <Button guid="My_ExtVS2019PackageCmdSet" id="cmdidMyOtherControlCommand" priority="0x0100" type="Button">
    <!--<Parent guid="guidSHLMainMenu" id="IDG_VS_WNDO_OTRWNDWS1" />-->
    <Parent guid="MyGroupMenuSet" id="MyMenuGroup" />
    <Strings>
      <ButtonText>My Other Window</ButtonText>
    </Strings>
  </Button>
</Buttons>
</Commands>

<Symbols>
  <!-- This is the package guid. -->
  <GuidSymbol name="My_ExtVS2019Package" value="{a28e16ed-f550-4cac-b087-f3728834a026}" />

  <GuidSymbol value="{3d62bd83-4a3e-4e04-8ea8-800ea9316e90}" name="My_ExtVS2019PackageCmdSet">
    <IDSymbol value="256" name="cmdidMyWindowCommand" />
    <IDSymbol value="257" name="cmdidMyOtherControlCommand" />
  </GuidSymbol>

  <GuidSymbol value="{dd7dd38d-bf53-408e-baa4-c5c7c7774f19}" name="MyGroupMenuSet">
    <IDSymbol value="4128" name="MyMenuGroup" />
    <IDSymbol value="256" name="cmdidCommand1" />
  </GuidSymbol>

</Symbols>

任何提示我的代码有什么问题吗?

1 个答案:

答案 0 :(得分:1)

  

当前,菜单项显示在的“查看/其他Windows”菜单中   visual studio,如果我将它们指向IDG_VS_WNDO_OTRWNDWS1。

Button的父级应该是group类型。 IDG_VS_WNDO_OTRWNDWS1IDG_VS_VIEW_DEV_WINDOWS的一个子组,因此它可以像我们期望的那样工作。

  

但是,如果我尝试将它们指向MyMenuGroup,它们就不会出现。

MyMenuGroupIDG_VS_WNDO_OTRWNDWS1也代表Group类型。一组的父项应该是一个菜单,而不是一组菜单,否则它将不起作用。请参阅我的另一期here

因此,如果要使用自定义组,则应在xx.vsct中使用此结构:
Button => MyMenuGroup(group) => one menu(menu) => IDG_VS_WNDO_OTRWNDWS1(group)
  而不是:Button => MyMenuGroup(group) => IDG_VS_WNDO_OTRWNDWS1(group)

解决方法:

更改此部分:

    <Groups>
      <Group guid="MyGroupMenuSet" id="MyMenuGroup" priority="0x0100">
        <Parent guid="guidSHLMainMenu" id="IDG_VS_WNDO_OTRWNDWS1" />
      </Group>
    </Groups>

收件人:

    <!--<Groups>
      <Group guid="guidTestVSIXWindowPackageCmdSet" id="MyMenuGroup" priority="0x0600">
        <Parent guid="guidSHLMainMenu" id="IDG_VS_WNDO_OTRWNDWS1"/>
      </Group>
    </Groups>-->

    <Menus>
      <Menu guid="guidTestVSIXWindowPackageCmdSet" id="MyMenu" priority="0x0100" type="Menu">
        <Parent guid="guidSHLMainMenu" id="IDG_VS_WNDO_OTRWNDWS1"/>
        <Strings>
          <ButtonText>My Two Windows</ButtonText>
          <CommandName>MyTwoWindows</CommandName>
        </Strings>
      </Menu>
    </Menus>

    <Groups>
      <Group guid="guidTestVSIXWindowPackageCmdSet" id="MyMenuGroup" priority="0x0600">
        <Parent guid="guidTestVSIXWindowPackageCmdSet" id="MyMenu"/>
      </Group>
    </Groups>

不要忘记在MyMenu中定义GuidSymbol

  <GuidSymbol value="{dd7dd38d-bf53-408e-baa4-c5c7c7774f19}" name="MyGroupMenuSet">
    <IDSymbol value="4128" name="MyMenuGroup" />
    <IDSymbol value="256" name="cmdidCommand1" />
    <IDSymbol name="MyMenu" value="41" />
  </GuidSymbol>

然后,VS可以通过这种方式来显示两个窗口(View =>其他窗口):

enter image description here

此外:对于未定义的IDM_VS_MENU_EXTENSIONS,我已经发布了反馈here。我认为,这可能是有关文档或构建工具包的问题,​​对此感兴趣的任何人都可以跟踪该问题并在那里获取最新信息。

希望有帮助:)