简体   繁体   English

Visual Studio VSIX 扩展未显示在“工具”菜单中

[英]Visual Studio VSIX Extension not showing in Tools menu

I have been using an extension I really like in Visual Studio since version 2013. The extension is not maintained by its creator, but he posted the source code on GitHub. With every new version of Visual Studio I would do my best to update the extension so it would still work (I have no other experience with Extensions).自 2013 版以来,我一直在使用 Visual Studio 中我非常喜欢的扩展。该扩展不是由其创建者维护的,但他在 GitHub 上发布了源代码。对于 Visual Studio 的每个新版本,我都会尽力更新扩展所以它仍然可以工作(我没有其他扩展经验)。

Unfortunately, in Visual Studio 2019, Microsoft deprecated one of the libraries that this extension depends on heavily (the Work Item Tracking).不幸的是,在 Visual Studio 2019 中,Microsoft 弃用了此扩展严重依赖的库之一(工作项跟踪)。 I've been trying to follow their migration guide but it only has a couple of code samples I could use (mostly involving Queries).我一直在尝试遵循他们的迁移指南,但它只有几个我可以使用的代码示例(主要涉及查询)。 Most of the code that needs converting is over my head (example: WorkItemStore or WorkItemCollection).大多数需要转换的代码都在我的脑海中(例如:WorkItemStore 或 WorkItemCollection)。

I have been able to get the project to build/compile successfully but due to the above, it has many warnings about the obsolete items ('QueryItem' is obsolete. For more information please see documentation at http://aka.ms/witclientom ).我已经能够让项目成功构建/编译,但由于上述原因,它有许多关于过时项目的警告('QueryItem' 已过时。有关更多信息,请参阅文档http://aka.ms/witclientom ). However, there are no build errors and I can install the extension.但是,没有构建错误,我可以安装扩展。

Once installed, the extension can be seen (and uninstalled) via the Extensions - Manage Extensions page, and information about the extension can be seen in the Help - About screen.安装后,可以通过扩展 - 管理扩展页面查看(和卸载)扩展,有关扩展的信息可以在帮助 - 关于屏幕中查看。 However, the extension SHOULD add two items to the Tools menu - and most of the time, it does not.但是,扩展应该向“工具”菜单添加两个项目——大多数情况下,它不会。 I have somehow managed to get the items to show up a couple of times, but would get an exception when trying to access them (via either the Experimental Instance of Visual Studio or the regular one).我设法让项目显示了几次,但在尝试访问它们时会出现异常(通过 Visual Studio 的实验实例或常规实例)。 When I stopped debugging to fix the error, then uninstalled, built, and re-installed the extension, the Tools menu items are once again missing.当我停止调试以修复错误,然后卸载、构建并重新安装扩展时,工具菜单项再次丢失。 I do not know how to get them back, nor do I understand how to figure out why they are missing - presumably due to an error, but the debug/experimental instance is not helpful here as it doesn't break or show any errors.我不知道如何取回它们,也不知道如何找出它们丢失的原因 - 可能是由于错误,但调试/实验实例在这里没有帮助,因为它不会中断或显示任何错误。

Is there another way I can see why the Tools menu items are not showing up?有没有其他方法可以让我了解为什么“工具”菜单项未显示?

UPDATE: Here is the contents of my extension's.vsct file.更新:这是我的扩展程序的 .vsct 文件的内容。 I checked it, and it appears that each item has its own unique ID.我检查了一下,似乎每个项目都有自己唯一的 ID。

<?xml version="1.0" encoding="utf-8"?>
<CommandTable xmlns="http://schemas.microsoft.com/VisualStudio/2005-10-18/CommandTable" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <!--  This is the file that defines the actual layout and type of the commands.
        It is divided in different sections (e.g. command definition, command
        placement, ...), with each defining a specific set of properties.
        See the comment before each section for more details about how to
        use it. -->

  <!--  The VSCT compiler (the tool that translates this file into the binary 
        format that VisualStudio will consume) has the ability to run a preprocessor 
        on the vsct file; this preprocessor is (usually) the C++ preprocessor, so 
        it is possible to define includes and macros with the same syntax used 
        in C++ files. Using this ability of the compiler here, we include some files 
        defining some of the constants that we will use inside the file. -->

  <!--This is the file that defines the IDs for all the commands exposed by VisualStudio. -->
  <Extern href="stdidcmd.h"/>

  <!--This header contains the command ids for the menus provided by the shell. -->
  <Extern href="vsshlids.h"/>

  <!--The Commands section is where we the commands, menus and menu groups are defined.
      This section uses a Guid to identify the package that provides the command defined inside it. -->
  <Commands package="guidTeamPilgrimPkg">
    <!-- Inside this section we have different sub-sections: one for the menus, another  
    for the menu groups, one for the buttons (the actual commands), one for the combos 
    and the last one for the bitmaps used. Each element is identified by a command id that  
    is a unique pair of guid and numeric identifier; the guid part of the identifier is usually  
    called "command set" and is used to group different command inside a logically related  
    group; your package should define its own command set in order to avoid collisions  
    with command ids defined by other packages. -->

    <!-- In this section you can define new menu groups. A menu group is a container for 
         other menus or buttons (commands); from a visual point of view you can see the 
         group as the part of a menu contained between two lines. The parent of a group 
         must be a menu. -->
    <Groups>

      <Group guid="guidTeamPilgrimCmdSet" id="TeamPilgrimMenuGroup" priority="0x0600">
        <Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS"/>
      </Group>
    </Groups>

    <!--Buttons section. -->
    <!--This section defines the elements the user can interact with, like a menu command or a button 
        or combo box in a toolbar. -->
    <Buttons>
      <!--To define a menu group you have to specify its ID, the parent menu and its display priority. 
          The command is visible and enabled by default. If you need to change the visibility, status, etc, you can use
          the CommandFlag node.
          You can add more than one CommandFlag node e.g.:
              <CommandFlag>DefaultInvisible</CommandFlag>
              <CommandFlag>DynamicVisibility</CommandFlag>
          If you do not want an image next to your command, remove the Icon node /> -->

      <Button guid="guidTeamPilgrimCmdSet" id="toolTeamPilgrimExplorer" priority="0x0100" type="Button">
        <Parent guid="guidSHLMainMenu" id="IDG_VS_WNDO_OTRWNDWS1"/>
        <Icon guid="guidImages" id="bmpPic1" />
        <Strings>
          <ButtonText>Team Pilgrim Explorer</ButtonText>
        </Strings>
      </Button>

      <Button guid="guidTeamPilgrimCmdSet" id="toolTeamPilgrimPendingChanges" priority="0x0100" type="Button">
        <Parent guid="guidSHLMainMenu" id="IDG_VS_WNDO_OTRWNDWS1"/>
        <Icon guid="guidImages" id="bmpPendingChanges" />
        <Strings>
          <ButtonText>Team Pilgrim Pending Changes</ButtonText>
        </Strings>
      </Button>

      <Button guid="guidTeamPilgrimCmdSet" id="cmdTeamPilgrimExplorer" priority="0x0100" type="Button">
        <Parent guid="guidTeamPilgrimCmdSet" id="TeamPilgrimMenuGroup" />
        <Icon guid="guidImages" id="bmpPic1" />
        <Strings>
          <ButtonText>Team Pilgrim Explorer</ButtonText>
        </Strings>
      </Button>

      <Button guid="guidTeamPilgrimCmdSet" id="cmdTeamPilgrimPendingChanges" priority="0x0100" type="Button">
        <Parent guid="guidTeamPilgrimCmdSet" id="TeamPilgrimMenuGroup" />
        <Icon guid="guidImages" id="bmpPendingChanges" />
        <Strings>
          <ButtonText>Team Pilgrim Pending Changes</ButtonText>
        </Strings>
      </Button>
    </Buttons>

    <!--The bitmaps section is used to define the bitmaps that are used for the commands.-->
    <Bitmaps>
      <!--  The bitmap id is defined in a way that is a little bit different from the others: 
            the declaration starts with a guid for the bitmap strip, then there is the resource id of the 
            bitmap strip containing the bitmaps and then there are the numeric ids of the elements used 
            inside a button definition. An important aspect of this declaration is that the element id 
            must be the actual index (1-based) of the bitmap inside the bitmap strip. -->
      <Bitmap guid="guidImages" href="Resources\Images.png" usedList="bmpPic1, bmpPendingChanges"/>

    </Bitmaps>
  </Commands>

  <Symbols>
    <!-- This is the package guid. -->
    <GuidSymbol name="guidTeamPilgrimPkg" value="{f56b8666-3ef2-46e5-ac26-8aa0efe1f484}" />

    <!-- This is the guid used to group the menu commands together -->
    <GuidSymbol name="guidTeamPilgrimCmdSet" value="{064ac9aa-5aa9-498a-a5d9-2077be8d9ad6}">

      <IDSymbol name="TeamPilgrimMenuGroup" value="0x1020" />
      <IDSymbol name="cmdTeamPilgrimExplorer" value="0x0100" />
      <IDSymbol name="toolTeamPilgrimExplorer" value="0x0101" />
      <IDSymbol name="cmdTeamPilgrimPendingChanges" value="0x0102" />
      <IDSymbol name="toolTeamPilgrimPendingChanges" value="0x0103" />
    </GuidSymbol>  

    <GuidSymbol name="guidImages" value="{91572e9b-72ad-453b-93df-dfc995721a79}" >
      <IDSymbol name="bmpPic1" value="1" />
      <IDSymbol name="bmpPendingChanges" value="2" />
      <IDSymbol name="bmpPicSearch" value="3" />
      <IDSymbol name="bmpPicX" value="4" />
      <IDSymbol name="bmpPicArrows" value="5" />
      <IDSymbol name="bmpPicStrikethrough" value="6" />
    </GuidSymbol>
  </Symbols>

</CommandTable>

If you get here like me, trying to find why your working extension suddenly (for you) lost all toolbars and menus - then please check that your.vsct file is really processed by VSCT compiler - it should be an VSCTCompile item - something like this如果你像我一样来到这里,试图找出为什么你的工作扩展突然(对你)丢失了所有工具栏和菜单 - 然后请检查你的 .vsct 文件是否真的由 VSCT 编译器处理 - 它应该是一个 VSCTCompile 项目 - 像这样

<VSCTCompile Include="MainPackage.vsct">
  <AutoGen>True</AutoGen>
  <DesignTime>True</DesignTime>
  <DependentUpon>MainPackage.tt</DependentUpon>
  <ResourceName>Menus.ctmenu</ResourceName>
  <SubType>Designer</SubType>
</VSCTCompile>  </ItemGroup>

instead of this in my case而不是在我的情况下

<Content Include="MainPackage.vsct">
  <AutoGen>True</AutoGen>
  <DesignTime>True</DesignTime>
  <DependentUpon>MainPackage.tt</DependentUpon>
</Content>

However, the extension SHOULD add two items to the Tools menu - and most of the time, it does not.然而,扩展应该在工具菜单中添加两个项目——而且大多数时候,它不会。

1.Since VS2019, it will block any extension from synchronously autoloading. 1.自VS2019起,它将阻止任何扩展同步自动加载。 If you get any warning about that, you may need to upgrade the extension to support async background loading.如果您收到任何警告,您可能需要升级扩展以支持异步后台加载。 More details refer to this blog .更多详细信息请参阅此博客

2.Maybe something wrong with your xx.vsct file, if the structure in it is not valid, the build won't fail and throw error, but you may not see the Item displayed... 2.可能你的xx.vsct文件有问题,如果里面的结构无效,构建不会失败并抛出错误,但你可能看不到显示的项目...

Microsoft deprecated one of the libraries that this extension depends on heavily (the Work Item Tracking) Microsoft 弃用了此扩展严重依赖的库之一(工作项跟踪)

This API is more like TFS API , not VS SDK API , I guess the reason why you can't find the two items is about tip1 or tip2, and the reason why you get an exception when trying to access them is about those APIS are deprecated so I guess you may need to use new REST APIS . This API is more like TFS API , not VS SDK API , I guess the reason why you can't find the two items is about tip1 or tip2, and the reason why you get an exception when trying to access them is about those APIS are已弃用,所以我猜您可能需要使用新的REST APIS

I had a similar problem with an old extension that also uses deprecated API.我在使用已弃用的 API 的旧扩展时遇到了类似的问题。 In the first versions of Visual Studio 2019 it was working properly, but after a VS update, one of the windows stop to work properly and became a "blank window".在 Visual Studio 2019 的第一个版本中,它工作正常,但在 VS 更新后,其中一个 windows 停止正常工作并成为“空白窗口”。 I spent some months googling a way to solve this problem, and I could fix it by disabling the option in Tools -> Options -> Environment -> General -> "Optimize rendering for screens with different pixel densities"我花了几个月的时间在谷歌上搜索解决这个问题的方法,我可以通过禁用工具 -> 选项 -> 环境 -> 常规 -> “优化具有不同像素密度的屏幕的渲染”中的选项来修复它

The following steps seem to restore the Tools menu state on the experimental instance of VS (using 2022):以下步骤似乎可以恢复VS实验实例上的Tools菜单state(使用2022):

  1. Using 'Regedit' Delete or rename HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\17.0_7d3fd73aExp (or its equivalent for your version of VS).使用 'Regedit' 删除或重命名 HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\17.0_7d3fd73aExp(或您的 VS 版本的等效项)。
  2. Reset the experimental instance by running: 'Reset the Visual Studio 2022 Experimental Instance'通过运行重置实验实例:“重置 Visual Studio 2022 实验实例”
  3. Re-deploy your VSIX package (or rebuild it through VS while having checked the option "Deploy VSIX content to experimental instance for debugging")重新部署您的 VSIX package(或通过 VS 重建它,同时选中“将 VSIX 内容部署到实验实例以进行调试”选项)

Hopefully this helps!希望这会有所帮助!

A quick way to fix the "missing icons":修复“丢失的图标”的快速方法:

  1. Open VS developer prompt打开 VS 开发者提示
  2. Close all VS instances关闭所有 VS 实例
  3. Run devenv /updateConfiguration运行devenv /updateConfiguration

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 VSIX Visual Studio 扩展项目模板创建 - VSIX Visual studio extension project template Creation 在 Visual Studio 中为 Visual Studio 扩展 (VSIX) 获取选定的选项卡 - Get the selected tabs in Visual studio for Visual studio extension (VSIX) VSIX:将菜单项添加到 Visual Studio 编辑器上下文菜单 - VSIX: Adding a Menu Item to the Visual Studio Editor Context Menu 开发Visual Studio 2013扩展“ * .vsix”时显示奇怪 - Strange display when developing a Visual Studio 2013 Extension “*.vsix” 如何将 Newtonsoft.Json 添加到 Visual Studio 扩展 Vsix - How to add Newtonsoft.Json to visual studio extension Vsix VSIX 凭据的存储位置 - Visual Studio 2017 扩展 - Where to store credentials for VSIX - Visual Studio 2017 Extension 如何在Visual Studio扩展(VSIX)中将项目文件类型与项目类型相关联 - How to associate project filetypes with project type in Visual Studio Extension (VSIX) 如何为多个Visual Studio版本打包基于VSIX的扩展? - How to package a VSIX-based extension for multiple Visual Studio versions? 如何在VSIX MEF扩展中重用Visual Studio WPF样式的控件? - How to reuse Visual Studio WPF styles for controls in VSIX MEF extension? 在 Azure Pipelines (CI) 中安装 Visual Studio 扩展 (.vsix) - Install Visual Studio extension (.vsix) in Azure Pipelines (CI)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM