VS插件编写初探
很久没来C#版,特来散下分。
CSDN的blog系统确实太烂,本文图片使用ikaca相册,不保证能够显示。
排版的话就将就吧
本文以一个简单的 VS 插件的编写过程来对 VS 自动化模型进行简单的介绍。这个 VS 插件有以下功能:调用 Google 搜索代码编辑器中选中的文本。
在代码编辑器中选中文本后单击鼠标右键能弹出如下图所示的菜单:
建立 VS 外接程序的方法非常简单,像普通的 Windows Application 一样, VS 已经提供了完整的向导帮助我们建立 Addin 程序。
通过选择文件菜单、新建、项目打开新建项目对话框,然后选择 “ 其他项目类型 ” 、 “ 扩展性 ” ,选择 “Visual Studio 外接程序 ” 打开外接程序向导。
以 VS2008 为例,打开向导后选择“下一步”出现下图:
选择 C# ,接着根据提示选择支持的 VS 版本:
填写项目名称和说明,出现下面得对话框,
如果想要创建菜单项,可以选中第一项,向导将自动生成相关的代码,建议选中,因为向导所生成的代码可以作为添加更多菜单时代码的模板,而且,所生成的代码支持多种语言。
如果想要外接程序在 VS 启动的时候自动加载,可以选中第二项。如果没有选中此项,可以手动修改工程目录下的 “ 工程名 .AddIn” 文件。该文件其实是 xml 格式的文件,用于配置外接程序的选项,使用记事本或其他文本编辑工具打开,修改此项为 1 即可: <LoadBehavior>0</LoadBehavior>
这样,便生成了一个外接程序的项目,我们可以修改、编写代码完成外接程序。此时的代码已经可以编译运行,运行后,在 VS 的外接程序管理器中将可以插件的有关项。
选中加载插件,便可以在工具菜单中看到名为 “SearchGoogle” 的菜单项。
接下来,我们为插件在代码编辑器中添加右键菜单项,首先,先使用单例模式创建一个类,用于保存生成的右键菜单项对象,大致代码如下:
namespace SearchOnWeb{ public sealed class InternalInfo { private static InternalInfo internalInfo = null; public static InternalInfo GetInternalInfoInstance() { if (internalInfo == null) { internalInfo = new InternalInfo(); } return internalInfo; } private InternalInfo() { this.pop = null; } private CommandBarPopup pop; public CommandBarPopup Pop { get { return pop; } set { pop = value; } } }}
public void Exec(string commandName, vsCommandExecOption executeOption, ref object varIn, ref object varOut, ref bool handled){ handled = false; if (executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault) { if (commandName == "SearchOnWeb.Connect.SearchOnGoogle") { this.goSearchGoogle(); handled = true; return; } }}
插件卸载后的菜单如下:
这样,一个简单的插件的框架就完成了,我们最后为 goSearchGoogle 添加代码:
private void goSearchGoogle(){ TextSelection selection = (TextSelection)_applicationObject.ActiveDocument.Selection; if (selection == null || selection.Text == "") { System.Windows.Forms.MessageBox.Show("没有选中的文本."); return; } _applicationObject.ItemOperations.Navigate("http://www.google.cn/search?hl=zh-CN&q=" + selection.Text, vsNavigateOptions.vsNavigateOptionsNewWindow);}