gpt4 book ai didi

vsix - 如何为特定项目类型自定义解决方案资源管理器中的上下文菜单?

转载 作者:行者123 更新时间:2023-12-01 00:59:45 29 4
gpt4 key购买 nike

说明

我开发了一个 Visual Studio 扩展(VSPackage),它向 Visual Studio 添加了一个新的项目类型(使用 CPS Project System)。我还向 VSPackage 添加了一些命令。

在解决方案资源管理器中右键单击我的项目节点时,我希望显示一个自定义的上下文菜单。

示例

例如:在下面的屏幕截图中,我想去掉 Build 命令并添加一个自定义命令(例如 mycommand )。

enter image description here

我试过了..

设置 Parent我的自定义命令 IDM_VS_CTXT_PROJNODE .

问题

  • 当我创建一个新的自定义项目类型时,如何在解决方案资源管理器中为我的项目节点创建一个新的上下文菜单?
  • 如何为自定义项目删除/添加命令到上下文菜单:
    如果我有一个 C#项目,上下文菜单应该是默认的,如果我添加一个 MyProjectType项目,我想在解决方案资源管理器中右键单击项目节点时看到不同的上下文菜单。
  • 最佳答案

    您与 IDM_VS_CTXT_PROJNODE 关系密切 parent 。

    这是我在 FluentMigratorRunner 中实现它的方法扩展,如果它引用了 FluentMigrator NuGet 包,它只显示项目的上下文菜单项。

    第一步:将子菜单添加到上下文菜单

    <Menus>
    <Menu guid="guidCmdSet" id="packageMenu" priority="0x0300" type="Menu">
    <Parent guid="guidSHLMainMenu" id="IDG_VS_CTXT_PROJECT_BUILD" />
    <CommandFlag>DynamicVisibility</CommandFlag>
    <CommandFlag>DefaultInvisible</CommandFlag>
    <Strings>
    <ButtonText>CPSProject</ButtonText>
    <CommandName>CPSProject</CommandName>
    </Strings>
    </Menu>

    注意添加的特殊 CommandFlag元素。

    第 2 步:将组添加到菜单
    <Groups>  
    <Group guid="guidCmdSet" id="packageMenuGroup" priority="0x0600">
    <Parent guid="guidCmdSet" id="packageMenu" />
    </Group>
    </Groups>

    第 3 步:添加按钮

      <Button guid="guidCmdSet" id="specialBuildActionId" priority="0x0100" type="Button">
    <Parent guid="guidCmdSet" id="packageMenuGroup" />
    <CommandFlag>DynamicVisibility</CommandFlag>
    <Strings>
    <ButtonText>Special build</ButtonText>
    </Strings>

    第 4 步:在 *Package.cs 中添加菜单
    protected override async System.Threading.Tasks.Task InitializeAsync(System.Threading.CancellationToken cancellationToken, IProgress<ServiceProgressData> progress)
    {
    // Initialize the Fluent Migrator Menu, should only be visible for projects with FluentMigrator reference
    var mcs = await GetServiceAsync(typeof(IMenuCommandService)) as OleMenuCommandService;
    var menuCommandId = new CommandID(packageCmdSetGuidString, 0x1010);
    var menuItem = new OleMenuCommand(null, menuCommandId);
    menuItem.BeforeQueryStatus += MenuItem_BeforeQueryStatus;

    mcs.AddCommand(menuItem);
    }

    private void MenuItem_BeforeQueryStatus(object sender, EventArgs e) =>
    ((OleMenuCommand)sender).Visible = ???;

    注意添加的 BeforeQueryStatus事件处理程序。

    在该事件处理程序中,您可以检查项目的类型并返回一个 bool 值,控制是否应显示额外的上下文菜单是或否

    关于vsix - 如何为特定项目类型自定义解决方案资源管理器中的上下文菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37819010/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com