使用菜单命令创建扩展

本演练演示如何使用启动记事本的菜单命令创建扩展。

创建菜单命令

  1. 创建名为 FirstMenuCommand的 VSIX 项目。 可以通过搜索“vsix”在 新建项目 对话框中找到 VSIX 项目模板。

  2. 项目打开时,添加一个自定义命令项模板,命名为 FirstCommand。 在 解决方案资源管理器中,右键单击项目节点,然后选择“添加>新项。 在“添加新项 对话框中,转到 C# 项>扩展性 并选择 命令。 在窗口底部的 名称 字段中,将命令文件名更改为 FirstCommand.cs

  3. 生成项目并开始调试。

    此时会显示 Visual Studio 的实验实例。 有关实验实例的详细信息,请参阅 实验实例

  4. 在试验实例中,打开“扩展”>“管理扩展”窗口。 应会在此处看到 FirstMenuCommand 扩展。 (如果在 Visual Studio 的工作实例中打开 管理扩展,则看不到 FirstMenuCommand)。

现在,转到实验实例中的 工具 菜单。 您应该会看到 调用 FirstCommand 命令。 此时,该命令会弹出一个消息框,显示 FirstCommand Inside FirstMenuCommand.FirstCommand.MenuItemCallback()。 在下一部分中,我们将了解如何从此命令实际启动记事本。

更改菜单命令处理程序

现在,让我们更新命令处理程序以启动记事本。

  1. 停止调试并返回到 Visual Studio 的工作实例。 打开 FirstCommand.cs 文件并添加以下 using 语句:

    using System.Diagnostics;
    
  2. 查找专用 FirstCommand 构造函数。 这是将命令连接到命令服务并指定命令处理程序的位置。 将命令处理程序的名称更改为 StartNotepad,如下所示:

    private FirstCommand(AsyncPackage package, OleMenuCommandService commandService)
    {
        this.package = package ?? throw new ArgumentNullException(nameof(package));
        commandService = commandService ?? throw new ArgumentNullException(nameof(commandService));
    
        CommandID menuCommandID = new CommandID(CommandSet, CommandId);
        // Change to StartNotepad handler.
        MenuCommand menuItem = new MenuCommand(this.StartNotepad, menuCommandID);
        commandService.AddCommand(menuItem);
    }
    
  3. 删除 Execute 方法并添加 StartNotepad 方法,该方法将仅启动记事本:

    private void StartNotepad(object sender, EventArgs e)
    {
        ThreadHelper.ThrowIfNotOnUIThread();
    
        Process proc = new Process();
        proc.StartInfo.FileName = "notepad.exe";
        proc.Start();
    }
    
  4. 现在试一试。开始调试项目并单击 工具>调用 FirstCommand时,应会看到记事本的实例出现。

    可以使用 Process 类的实例来运行任何可执行文件,而不仅仅是记事本。 例如,可以用 calc.exe 来试试。

清理实验环境

如果要开发多个扩展,或者只是使用不同版本的扩展代码探索结果,实验环境可能会停止运行它应采用的方式。 在这种情况下,应运行重置脚本。 它称为 重置 Visual Studio 实验实例,并作为 Visual Studio SDK 的一部分提供。 此脚本从实验环境中删除对扩展的所有引用,因此可以从头开始。

可以通过以下两种方式之一访问此脚本:

  1. 从桌面中,找到 重置 Visual Studio 实验实例

  2. 在命令行中运行以下命令:

    <VSSDK installation>\VisualStudioIntegration\Tools\Bin\CreateExpInstance.exe /Reset /VSInstance=<version> /RootSuffix=Exp && PAUSE
    
    

部署扩展

现在,你的工具扩展以所需方式运行,现在是时候考虑与朋友和同事共享它了。 只要已安装 Visual Studio 2015,就很容易。 只需向他们发送生成的 .vsix 文件。 (请务必在发布模式下生成它。)

可以在 FirstMenuCommand bin 目录中找到此扩展名的 .vsix 文件。 具体而言,假设你已生成发布配置,它将位于:

<代码目录>\FirstMenuCommand\FirstMenuCommand\bin\Release\FirstMenuCommand.vsix

若要安装该扩展,你的好友需要关闭 Visual Studio 的所有打开实例,然后双击 .vsix 文件,该文件将显示 VSIX 安装程序。 这些文件将复制到 %LocalAppData%\Microsoft\VisualStudio<>\Extensions 目录中。

当你的朋友再次打开 Visual Studio 时,他们将在 Tools>扩展和更新中找到 FirstMenuCommand 扩展。 他们也可以转到 扩展和更新 卸载或禁用扩展。

后续步骤

本演练仅演示了 Visual Studio 扩展可以执行的操作的一小部分。 下面是可以使用 Visual Studio 扩展执行的其他(相当简单)的简短列表:

  1. 可以使用简单的菜单命令执行更多操作:

    1. 添加自己的图标:向菜单命令添加图标

    2. 更改菜单命令的文本:更改菜单命令的文本

    3. 向命令添加菜单快捷方式:将键盘快捷方式绑定到菜单项

  2. 添加不同类型的命令、菜单和工具栏:扩展菜单和命令

  3. 添加工具窗口并扩展内置 Visual Studio 工具窗口:扩展和自定义工具窗口

  4. 将 IntelliSense、代码建议和其他功能添加到现有代码编辑器:扩展编辑器和语言服务

  5. 向扩展添加选项和属性页和用户设置:扩展属性和属性窗口扩展用户设置和选项

    其他类型的扩展需要更多工作,例如创建新类型的项目(扩展项目),或创建新类型的编辑器(创建自定义编辑器和设计器)。