使用菜单命令创建扩展
此演练演示如何使用启动记事本的菜单命令创建扩展。
创建菜单命令
创建名为 FirstMenuCommand 的 VSIX 项目。 可以通过在新建项目对话框中搜索“vsix”,找到 VSIX 项目模板。
当项目打开时,添加名为 FirstCommand 的自定义命令项模板。 在“解决方案资源管理器”中,右键单击项目节点并选择“添加”>“新建项”。 在添加新项对话框中,转到C# 项>扩展性,并选择命令。 在窗口底部的名称字段中,将命令文件名更改为 FirstCommand.cs。
生成项目并启动调试。
此时会出现 Visual Studio 的实验实例。 有关实验实例的详细信息,请参阅实验实例。
在实验实例中,打开扩展>管理扩展窗口。 你应在此处看到 FirstMenuCommand 扩展。 (如果你在 Visual Studio 的工作实例中打开管理扩展,则看不到 FirstMenuCommand)。
现在,转到实验实例中的工具菜单。 你应该会看到调用 FirstCommand 命令。 此时,该命令会显示一个消息框,其中显示 FirstCommand Inside FirstMenuCommand.FirstCommand.MenuItemCallback()。 在下一个部分中,我们将了解如何通过此命令实际启动记事本。
更改菜单命令处理程序
现在,我们来更新命令处理程序以启动记事本。
停止调试并返回到 Visual Studio 的工作实例。 打开 FirstCommand.cs 文件并添加以下 using 语句:
using System.Diagnostics;
查找专用 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); }
删除
Execute
方法,并添加一个将仅启动记事本的StartNotepad
方法:private void StartNotepad(object sender, EventArgs e) { ThreadHelper.ThrowIfNotOnUIThread(); Process proc = new Process(); proc.StartInfo.FileName = "notepad.exe"; proc.Start(); }
现在试一试。开始调试项目并单击工具>调用 FirstCommand 时,你应会看到记事本的实例出现。
你可以使用 Process 类的实例来运行任何可执行文件,而不仅仅是记事本。 例如,请用
calc.exe
试一试。
清理实验环境
如果要开发多个扩展,或者只是使用不同版本的扩展代码了解结果,则实验环境可能会停止正常工作。 在这种情况下,你应该运行重置脚本。 它称为重置 Visual Studio 实验实例,并作为 Visual Studio SDK 的一部分提供。 此脚本从实验环境中删除对扩展的所有引用,因此你可以从头开始。
你可以通过以下两种方式之一访问此脚本:
从桌面中,找到重置 Visual Studio 实验实例。
从命令行运行以下命令:
<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 扩展执行的其他操作(相当简单)的简短列表:
你可以使用简单的菜单命令执行更多操作:
添加自己的图标:向菜单命令添加图标
更改菜单命令的文本:更改菜单命令的文本
向命令添加菜单快捷方式:将键盘快捷方式绑定到菜单项
添加不同类型的命令、菜单和工具栏:扩展菜单和命令
添加工具窗口并扩展内置 Visual Studio 工具窗口:扩展和自定义工具窗口
将 IntelliSense、代码建议和其他功能添加到现有代码编辑器中:扩展编辑器和语言服务
向扩展添加“选项”和“属性”页和用户设置: 扩展属性和属性窗口以及扩展用户设置和选项
其他类型的扩展需要执行更多工作,例如创建新类型的项目(扩展项目),或创建新类型的编辑器(创建自定义编辑器和设计器)。