使用菜单命令创建扩展

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

创建菜单命令

  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<version>\Extensions 目录。

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

后续步骤

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

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

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

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

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

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

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

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

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

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