c# - 如何在 Visual Studio 扩展中查找和修改现有菜单命令

标签 c# visual-studio-2015 vsix

我目前正在为 Visual Studio 编写一个插件/扩展,我希望能够找到现有的菜单命令并将其隐藏。具体来说,我想在上下文菜单中找到“重建”命令并隐藏或禁用它们。看起来我可以访问命令 ID:https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.vsconstants.vsstd2kcmdid(v=vs.140).aspx

使用 OleMenuCommandService 有一个 FindCommand,但它返回 NULL。这是我目前正在尝试的:

OleMenuCommandService mcs = GetService(typeof(IMenuCommandService)) as OleMenuCommandService;
if ( null != mcs )
{
    MenuCommand rebuildCommand = mcs.FindCommand(new CommandID(
        Microsoft.VisualStudio.VSConstants.UICONTEXT_SolutionHasSingleProject,
        (int)Microsoft.VisualStudio.VSConstants.VSStd97CmdID.RebuildCtx) );

    // rebuildCommand is NULL
}

有什么想法可以做到这一点吗?

最佳答案

不幸的是,似乎无法使用 FindCommand 方法获取现有的 Visual Studio 命令。您可以查看MSDN forum更详细的信息.

此外,我认为在扩展中使某些现有的 Visual Studio 功能不可用并不是一个好主意。相反,您可以订阅 CommandEvents.BeforeExecuteCommandEvents.AfterExecute 事件。操作方法如下:

using EnvDTE;
using EnvDTE80;
using Microsoft.VisualStudio.Shell;

...

DTE2 ide = ServiceProvider.GlobalProvider.GetService(typeof(DTE)) as DTE2);
CommandEvents commandEvents = ide.Events.CommandEvents;
commandEvents.BeforeExecute += OnBeforeExecute;
commandEvents.AfterExecute += OnAfterExecute;

...

private void OnBeforeExecute(string Guid, int ID, object CustomIn, object CustomOut, ref bool CancelDefault)
{
    if (ID == (int)VSConstants.VSStd97CmdID.RebuildCtx)
    {
        // Do something
    }
}

private void OnAfterExecute(string Guid, int ID, object CustomIn, object CustomOut, ref bool CancelDefault)
{
    if (ID == (int)VSConstants.VSStd97CmdID.RebuildCtx)
    {
        // Do something
    }
}

关于c# - 如何在 Visual Studio 扩展中查找和修改现有菜单命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34832277/

相关文章:

C# 开发状态

c# - 当用户断开连接时,信号器中有没有办法从列表中删除用户?

c# - 从 Application insights (Azure Portal) 获取数据以将其显示在 asp.net web 应用程序的网页上

c# - 可能是Visual Studio 2015中的C#编译器错误

visual-studio - 如何在 Visual Studio 2015 中创建的 VSIX 中调试 Visual Studio 包

c# - VS 扩展 : TextPoint. 大于/小于大文件非常慢

c# - 在c#中调整python的itertools.product内部的for

C# 项目文件夹命名约定

windows - DEP0001 : Unexpected Error: -1988945906 while deploying Windows UWP app to phone

c# - 菜单项的动态可见性