首页 > 解决方案 > 为什么我的扩展程序的菜单项没有出现?

问题描述

我正在构建我的第一个 VS 扩展,以允许用户加密/解密mailSettings/smtp.web.config

我希望在主 VS Tools 菜单中添加一个包含 2 个子项的菜单项:

Config Encryptor
  Encrypt Mail Settings
  Decrypt Mail Settings

.vsct文件的相关(我希望)部分如下:

<Menus>
  <Menu guid="guidEncryptConfigCommandPackageCmdSet" id="ConfigEncryptorMenu" priority="0x0100" type="Menu">
    <Parent guid="guidEncryptConfigCommandPackageCmdSet" id="ConfigEncryptorMenuGroup" />
    <Strings>
      <MenuText>Config Encryptor</MenuText>
      <ButtonText>Config Encryptor</ButtonText>
      <CommandName>Config Encryptor</CommandName>
    </Strings>
  </Menu>
</Menus>

<Groups>      
  <Group guid="guidEncryptConfigCommandPackageCmdSet" id="ConfigEncryptorMenu" priority="0x0200">
    <Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS" />
  </Group>
  <Group guid="guidEncryptConfigCommandPackageCmdSet" id="ConfigEncryptorMenuGroup" priority="0x0100">
    <Parent guid="guidEncryptConfigCommandPackageCmdSet" id="ConfigEncryptorMenu" />
  </Group>
</Groups>

<Buttons>
  <Button guid="guidEncryptConfigCommandPackageCmdSet" id="cmdidEncryptConfigCommand" priority="0x0100" type="Button">
    <Parent guid="guidEncryptConfigCommandPackageCmdSet" id="ConfigEncryptorMenuGroup" />
    <Strings>
      <ButtonText>Encrypt Mail Settings</ButtonText>
    </Strings>
  </Button>
  <Button guid="guidEncryptConfigCommandPackageCmdSet" id="cmdidDecryptConfigCommand" priority="0x0100" type="Button">
    <Parent guid="guidEncryptConfigCommandPackageCmdSet" id="ConfigEncryptorMenuGroup" />
    <Strings>
      <ButtonText>Decrypt Mail Settings</ButtonText>
    </Strings>
  </Button>
</Buttons>

<GuidSymbol name="guidEncryptConfigCommandPackageCmdSet" value="{2c763b06-e83f-4c03-8fc6-3a00416b361e}">
  <IDSymbol name="ConfigEncryptorMenu" value="0x1010" />
  <IDSymbol name="ConfigEncryptorMenuGroup" value="0x1020" />
  <IDSymbol name="cmdidEncryptConfigCommand" value="0x0100" />
  <IDSymbol name="cmdidDecryptConfigCommand" value="0x1021"  />
</GuidSymbol>

当我在新的 VS 实例中调试扩展项目时,菜单项没有出现,我做错了什么?

标签: visual-studiomenuvisual-studio-2017visual-studio-extensions

解决方案


有可能是因为您定义了一个menu其 ID 为的ConfigEncryptorMenu同时您还定义了一个group其 ID 也为的ConfigEncryptorMenu,这弄乱了结构。

让我们定义一个名为的新 IDSymbol GroupForSubMenu

<GuidSymbol name="guidEncryptConfigCommandPackageCmdSet" value="{2c763b06-e83f-4c03-8fc6-3a00416b361e}">
 ......
  <!-- New IDSymbol -->
  <IDSymbol name="GroupForSubMenu" value="0x1050"  />
</GuidSymbol>

然后将第一个 Group 的内容更改为:

  <Group guid="guidEncryptConfigCommandPackageCmdSet" id="GroupForSubMenu" priority="0x0200">
    <Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS" />
  </Group>

<Parent>并将in Menusection的值更改为:

<Parent guid="guidEncryptConfigCommandPackageCmdSet" id="ConfigEncryptorMenuGroup" /> 

<Parent guid="guidEncryptConfigCommandPackageCmdSet" id="GroupForSubMenu" />

MenuText 不是必需的,原始父关系似乎类似于ConfigEncryptorMenuGroup's parent is ConfigEncryptorMenuwhile ConfigEncryptorMenu's parent is ConfigEncryptorMenuGroup。纠正组和菜单之间的关系,问题就可以解决了。


推荐阅读