VS2005插件笔记

为了对指定的项目增加编译选项,希望实现一个VS2005插件(Add-in),在MSDN中叫外接程序。
需求是增加一个工具栏,放一个按钮,点击按钮后修改工程属性,增加或去掉编译选项,增加或去掉对某个lib文件的包含。

MSDN有很详细的说明,网上也有一两个例子。直接用向导可以生成就框架。
框架中需要主要三个地方,我按我的理解写,可能不是MSDN的本意:
OnConnect
初始化插件的地方,此处参数传入宿主程序(VS2005)和插件实例(Addin)
根据需要获取宿主程序的Commands,CommandBars,实现添加命令到工具栏和菜单的功能
函数参数中有connect mode(连接模式),指定插件何时被加载
一般使用UISetup mode,指定为第一次向VS2005加入此插件

Exec
执行插件的命令,命令格式为[插件].connect.[命令]
最后一个命令是OnConnect初始化的时候生成Command对象指定的。
参数中ref bool handled用于返回操作被执行了

QueryStatus
参数中的状态引用,用于更改按钮或菜单项的状态
除了support和Enable,Latched锁定状态可以产生按钮的边框,实现三态按钮

具体功能流程大致如下:
VCProject prj = (VCProject)dte.Solution.Projects.Item(1).Object;
IVCCollection cfgs = (IVCCollection)prj.Configurations;
VCConfiguration cfg = (VCConfiguration)cfgs.Item(1);
IVCCollection tools = (IVCCollection)cfg.Tools;

VCLinkerTool linker = (VCLinkerTool)tools.Item("VCLinkerTool");
linker.AdditionalDependencies = "xxx.lib";

object compiler = tools.Item("VCCLCompilerTool");
Type compilerType = compiler.GetType();
compilerType.InvokeMember("AdditionalOptions", BindingFlags.SetProperty, null, compiler, new object[] { @"/xxx" });

特别是获得compiler对象,由于Windows Mobile的VC编译器无法用名字VCCLCompilerTool获得,所以不得不采用最后三句非常规方法。其他对象的获取和枚举在MSDN里面都有说明和例子

最后又一个未能解决的问题,就是我希望加载了解决方案后,根据其中的Project的状况来初始化插件。
我希望如果当前项目是Windows Mobile项目,使用的语言是C/C++,才加载插件到工具栏
继而判断项目属性是否已经添加了我期望的编译选项和库文件,据此初始化按钮状态
但是我无法获得加载解决方案的时机,OnConnect似乎只能得到UISetup的连接模式,Solution模式无法得到,所有没有实现。

这个插件只是为了一时方便,所以没打算继续完善
在此留个笔记,以供需要开发插件者参考

 

你可能感兴趣的:(开发工具)