上一篇简单介绍了VSTA,这一篇开始,用一个实例来说明如何使用VSTA进行开发。
这个实例,我们要实现如下功能:
- 主窗体上点击按钮1,可以触发事件,打开一个基于此程序的IDE编程环境;
- 主窗体上点击按钮2,可以触发事件,在IDE编程环境中增加一个fun方法,如果此方法已经存在,则将光标定位到此方法;
- 主窗体上点击按钮3,可以触发事件,执行在IDE编程环境中编写的fun方法。
以上功能就满足了一个二次开发的基本要求,即主程序可以执行二次开发的代码,实现相应功能。
因为我使用的是Visual Studio 2005 Tools for Applications,所以就以此为例,当然现在微软已经发布了VSTA V2,是forVS2008的,也可通过一些处理使用在VS2005上。
前期装备工作:
- 安装VSTA SDK;
- 建立对象模型的proxy;
- 注册主程序;
- 创建模板。
首先是安装VSTA SDK,这个无需多说,有一点需要强调一下的是,装完SDK包后,需要安装%ProgramFiles%\Visual Studio 2005 Tools for Applications SDK\<Build Number>\VisualStudioToolsForApplications\SetupPackage\vsta_aide.msi,也可以在命令行模式下带参数安装msiexec /i vsta_aide.msi VSTAINVS=1,VSTAINVS=1这个参数表示可以用VS2005开发扩展功能,否则只可用VSTA的IDE进行开发。
安装完成之后需要进行建立相应的VS项目进行开发:
- 我们先建立一个空项目VSTASample,添加一个空的类库VSTASample,将class1.cs改名成VSTAApplication.cs(这里只是方便理解,没有实际用途),编译生成dll;
- 在项目文件夹下新建一个文件夹proxy(用来存放生成的proxy文件以及建立proxy工程);
- 打开“Visual Studio 2005 命令提示符”窗口,切换至%ProgramFiles%\Visual Studio 2005 Tools for Applications SDK\<build number>\VisualStudioToolsForApplications\Tools\ProxyGen\x86\
- 输入proxygen.exe /l:"%项目目录%\VSTASample\VSTASample\bin\Debug\VSTASample.dll" /c:"%项目目录%\VSTASample\VSTASample\proxy\Proxy.cs" /o:"%项目目录%\VSTASample\VSTASample\proxy\VSTASampleOM.xml" /f 回车;
- 用记事本中打开“VSTASampleOM.xml”描述文件,在类元素的结尾“isStatic="false"”之后添加以下属性:
isAddInEntryPoint="true“, 保存MyVSTAOM.xml并关闭; - 再次在命令行输入proxygen.exe /l:"%项目目录%\VSTASample\VSTASample\bin\Debug\VSTASample.dll" /c:"%项目目录%\VSTASample\VSTASample\proxy\Proxy.cs" /i:"%项目目录%\VSTASample\VSTASample\proxy\VSTASampleOM.xml" /f 回车,这里输出参数(/o)被改成了输入参数(/i)
- 接下来就简单了,建立一个proxy类库工程,把生成的proxy.cs文件添加进去,添加程序集Microsoft.VisualStudio.Tools.Applications.Adapter
Microsoft.VisualStudio.Tools.Applications.Contract
System.AddIn.Contract - 为proxy类库工程程序集强名称,编译生成proxy.dll;
- 简单说下强名称,打开工程的属性页,进入属性的签名标签
-
在标记页面,选择为程序集签名
-
选择强名称密钥文件列表,选择“新建”
-
-
在文件名键中输入key.snk
-
去除“设定密码保护密钥文件”选项,点击OK
-
-
将proxy.dll添加至程序集缓存
-
控制面板——>管理工具——>Microsoft .NET Framework 2.0 配置——>管理程序集缓存——>添加
-
-
到这里,proxy的建立就全部完成了,项目如图所示:
下一篇将接着介绍开发前提:注册主程序和创建模板。
P.S:时间比较紧,每一篇都写的比较少,大家见谅,下下篇将进入重点,如何实现打开VSTA IDE编程环境以及如何加载二次开发的程序并调用其中的方法。