0

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>

任何线索我的代码有什么问题?

4

1 回答 1

1

目前,如果我将菜单项指向 IDG_VS_WNDO_OTRWNDWS1,则菜单项会显示在 Visual Studio 的“查看/其他 Windows”菜单中。

Button 的父级应该是一个group类型。并且IDG_VS_WNDO_OTRWNDWS1是 的一个子组IDG_VS_VIEW_DEV_WINDOWS,所以它按我们预期的那样工作。

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

MyMenuGroupIDG_VS_WNDO_OTRWNDWS1代表Group类型。一个组的父级应该是一个菜单而不是一个组,否则它将不起作用。在这里查看我的另一个问题。

所以如果你想使用你的自定义组,你应该在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>

并且不要忘记定义MyMenuin 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可以以这种方式显示你的两个窗口(查看=>其他窗口):

在此处输入图像描述

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

希望能帮助到你:)

于 2019-12-06T05:20:59.470 回答