使用菜单命令创建扩展

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

创建菜单命令

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

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

  3. 生成项目并启动调试。

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

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

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

更改菜单命令处理程序

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

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

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

    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 文件。 具体而言,假设你已生成发布配置,它将位于:

<code directory>\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. 向扩展添加选项和属性页和用户设置: 扩展属性和属性窗口 以及 扩展用户设置和选项

    其他类型的扩展需要更多工作,例如创建新类型的项目(扩展项目)、创建新类型的编辑器(创建自定义编辑器和设计器),或在独立 shell 中实现扩展: Visual Studio 隔离 shell