'Why does my extension's menu item not appear?

I am building my first VS extension, to allow users to encrypt/decrypt the mailSettings/smtp section of web.config.

I wish to add a menu item that has 2 sub-items to the main VS Tools menu:

Config Encryptor
  Encrypt Mail Settings
  Decrypt Mail Settings

The relevant (I hope) parts of the .vsct file are as follows:

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

What am I doing wrong that the menu item doesn't appear when I debug the extension project in a new instance of VS?



Solution 1:[1]

There's possibility it's because you've defined a menu whose ID is ConfigEncryptorMenuwhile you also defined a group whose ID is also ConfigEncryptorMenu, which messed up the structure.

Let's define a new IDSymbol called GroupForSubMenu:

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

Then change the content of first Group to:

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

And change the value of <Parent> in Menu section from:

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

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

The MenuText is not necessary and the original parent relationship seems to be something like ConfigEncryptorMenuGroup's parent is ConfigEncryptorMenu while ConfigEncryptorMenu's parent is ConfigEncryptorMenuGroup. Correct the relation ship between the groups and menus, the issue can be solved.

Solution 2:[2]

I had a very similar problem trying to port an old extension to VS2022. Initially no toolbars would appear in my ported solution (which might be due to the reasons mentioned here Visual Studio VSIX Extension not showing in Tools menu), so I gave up and created a brand new extension using the "VSIX Project w/ Command (Community)" template that's in the "Extensibility Essentials 2022" extension.

Anyway, on adding the 'Menus' and 'Groups' across from my old VSCT file, the toolbars did not appear when debugging the extension.

The answer in my case was found at the bottom of point 4. of https://docs.microsoft.com/en-us/visualstudio/extensibility/adding-a-toolbar?view=vs-2022 with the quote "By default, if a toolbar has no commands, it does not appear."

Once I adjusted the parent of the default button, my toolbar then appeared in VS2022.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 LoLance
Solution 2 Coder_Dan