【问题标题】:Why does my extension's menu item not appear?为什么我的扩展程序的菜单项没有出现?
【发布时间】:2019-12-03 21:35:08
【问题描述】:

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

我希望在主 VS 工具菜单中添加一个包含 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-studio menu visual-studio-2017 visual-studio-extensions


    【解决方案1】:

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

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

    <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>
    

    并将Menu 部分中&lt;Parent&gt; 的值更改为:

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

    致&lt;Parent guid="guidEncryptConfigCommandPackageCmdSet" id="GroupForSubMenu" /&gt;

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多