VS 2005 Add-in开发随笔

    最近在改进 NBear的EntityDesignToEntityVsPlugin,给EntityDesignToEntityVsPlugin增加右键菜单功能,在选择EntryDesign项目时,点击右键时弹出相应的菜单,通过点击菜单项触发项目编译并根据实体设计类生成相应的实体类代码,在这里给大家分享一段在VS 2005 Add-in中实现右键菜单的代码:    
   
public   void  OnConnection( object  application, ext_ConnectMode connectMode,  object  addInInst,  ref  Array custom)
        {
            _applicationObject 
=  (DTE2)application;
            _addInInstance 
=  (AddIn)addInInst;
            CommandBars cmdBars 
=  (CommandBars)(_applicationObject.DTE.CommandBars);
            CommandBar vsBarProject 
=  cmdBars[ " Project " ];

            CommandBarPopup menu 
=  vsBarProject.Controls.Add(MsoControlType.msoControlPopup, Missing.Value, Missing.Value,  1 true as  CommandBarPopup;
            menu.Caption 
=   " DemoAddIn " ;
            menu.TooltipText 
=   "" ;

            CommandBarControl menuItem 
=  menu.Controls.Add(MsoControlType.msoControlButton,  1 "" 1 true );
            menuItem.Tag 
=   " BuildTest " ;
            menuItem.Caption 
=   " BuildTest " ;
            menuItem.TooltipText 
=   " BuildTest " ;
            menuItemHandler 
=  (CommandBarEvents)_applicationObject.DTE.Events.get_CommandBarEvents(menuItem);
            menuItemHandler.Click 
+=   new  _dispCommandBarControlEvents_ClickEventHandler(MenuItem_Click);   
            
        }

        
private   void  MenuItem_Click( object  commandBarControl,  ref   bool  handled,  ref   bool  cancelDefault)
        {
            _applicationObject.ExecuteCommand(
" Build.BuildSelection " "" ); 
        }

        
public   void  OnDisconnection(ext_DisconnectMode disconnectMode,  ref  Array custom)
        {
            CommandBars cmdBars 
=  (CommandBars)(_applicationObject.DTE.CommandBars);
            CommandBar vsBarProject 
=  cmdBars[ " Project " ];
            vsBarProject.Controls[
" DemoAddIn " ].Delete( null );
        }

上面代码实现的功能是当你在VS 2005中选择一个项目,点击右键出现一个DemoAddin的菜单,选择该菜单中的BuildTest菜单项,会调用编译命令编译当前项目。
在开发时,遇到了这样的问题:
开始时,把menuItemHandler定义局部变量,点击BuildTest菜单项时,有时不执行MenuItem_Click方法,有时第一次点击时执行,但再点击就不执行。
后来把menuItemHandler定义为类的成员变量才解决问题,具体原因目前还不清楚。

完整代码下载: http://files.cnblogs.com/dudu/DemoAddin.rar
如果你想手动添加上面的代码,Visual Studio 2005提供了Visual Studio Add-in模板,在新建项目时选择Other Project Types>Extensibility>Visual Studio Add-in,新建一个Visual Studio Add-in项目,将上面的代码添加到Connect类中。
编译后,将项目文件夹中的DemoAddin.AddIn及DemoAddin.dll复制到VS 2005的Addins文件夹中(默认在“我的文档\Visual Studio 2005\Addins”),然后打开VS 2005,在Tools>Add-in Manager中启用该Add-In,如果想默认启用该Add-in,可以在DemoAddin.AddIn文件中将LoadBehavior改为1。

参考文章:
Explorer - A Visual Studio 2005 add-in which interacts with Windows Explorer

你可能感兴趣的:(add)