一、 简介――Visual Studio.NET插件能做什么?
Visual Studio.NET插件能做很多事情,例如:
1、 编写如CodeRush一样的开发环境代码辅助工具
2、 编写如CodeSmith这样的代码模板工具
3、 编写代码生成器,根据自定义的一些条件自动生成代码。如现在比较流行的一些代码生成工具,如果和开发环境集成,使用起来应该会更加方便。
4、 编写如DataSetPryer这样的调试工具,可以在调试时查看DataSet的内容。
5、 甚至还可以在VS.NET里集成Google搜索引擎,或将MSN集成到VS.NET。
这里不再一一列举,总而言之,凡是可以和Visual Studio.NET开发环境相关的,都能以插件的形式进行。
开发VS.NET插件,目前有两种形式:一是利用VS向导生成的VS外接程序;二是利用微软的VSIP开发包(Visual Studio Industry Partner:微软合作伙伴计划)。本文讨论的是第一种方法。
二、 程序框架概述
在Visual Studio.NET中选择”新建项目à其他项目à扩展性项目àVisual Studio.NET外接程序”,按照向导生成代码,最后会生成两个工程文件,一个是外接程序项目,一个是外接程序安装项目。可以在外接程序项目里看到生成的项目文件中有个connect.cs文件,该文件有以下几个部分:
1、 类的继承接口及其常量定义
[GuidAttribute("952A6CFF-8516-4DA0-B0BA-519CB9614525"), ProgId("STDTools.Connect")]
public class Connect : Object, Extensibility.IDTExtensibility2, IDTCommandTarget
{…}
Connect类主要从两个接口继承,一个是Extensibility.IDTExtensibility2接口,该接口主要定义了下面几个方法:
OnAddInsUpdate 方法:在环境中加载或卸载外接程序时发生。
OnBeginShutdown 方法:正在关闭环境时发生。
OnConnection 方法:将外接程序加载到环境中时发生。
OnDisconnection 方法:当从环境中卸载外接程序时发生。
OnStartupComplete 方法:环境启动完毕时发生。
IDTCommandTarget接口则定义了以下两个方法
Exec 方法:在VS开发环境中选择了某个外接菜单命令时被VS环境所调用。
QueryStatus方法:当VS环境要显示外接菜单时调用该方法查询菜单的状态。
该方法返回指定的已命名命令的当前状态,无论此命令是启用、禁用还是隐藏
2、 OnConnection()函数:
本事件处理函数是在插件被加载时发生,一般用于做一些初始化工作,如创建菜单等。该函数的传入参数如下:
object application:定义了IDE自动化对象
Extensibility.ext_ConnectMode connectMode:连接模式,指明了插件当前的连接模式
ext_cm_AfterStartup 外接程序是在应用程序启动后加载的,或是通过将相应 AddIn 对象的 Connect 属性设置为 True 加载的。
ext_cm_Startup 外接程序是在启动时加载的。
ext_cm_UISetup 外接程序自安装后首次被启动。
object addInInst:表示外接程序实例的 AddIn 对象。
ref System.Array custom: 一个 Variant 数组,可以用来提供附加数据,一般不太常用。
3、 OnDisconnection()函数:系统卸载插件时被调用
本事件处理函数是在插件被卸载时发生,其传入参数如下
Extensibility.ext_DisconnectMode disconnectMode:
ext_dm_HostShutdown:外接程序是在开发环境关闭时卸载的。
ext_dm_UserClosed:外接程序是在用户清除“外接程序管理器”对话框中该外接程序的复选框时卸载的
ext_dm_UISetupComplete:外接程序是在环境安装完成后和在 OnConnection 方法返回后卸载的。
ref System.Array custom:
4、 QueryStatus()函数:系统查询菜单状态
该方法有四个传入参数
CmdName 要检查的命令的名称。
NeededText
一个 vsCommandStatusTextWanted 常数,指定是否返回检查信息,如果返回,还指定返回信息的类型。
vsCommandStatusTextWantedNone不返回信息。
vsCommandStatusTextWantedName返回命令名。
vsCommandStatusTextWantedStatus返回命令状态。
StatusOption
一个指定命令的当前状态的 vsCommandStatus 常数。
vsCommandStatusUnsupported 命令在此上下文中不受支持。
vsCommandStatusSupported 命令在此上下文中受支持。
vsCommandStatusEnabled 命令当前处于启用状态。
vsCommandStatusLatched 命令当前处于锁存状态。
vsCommandStatusNinched 留作将来使用。
vsCommandStatusInvisible 命令当前处于隐藏状态。
CommandText
指定 vsCommandStatusTextWantedStatus 时返回的文本。
5、 Exec()函数:
在VS开发环境中选择了某个外接菜单命令时被VS环境所调用,在这里可以编写自己的响应代码,例如运行自己的程序或弹出某个窗口。