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, 1trueas CommandBarPopup;
            menu.Caption 
= "DemoAddIn";
            menu.TooltipText 
= "";

            CommandBarControl menuItem 
= menu.Controls.Add(MsoControlType.msoControlButton, 1""1true);
            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定义为类的成员变量才解决问题,具体原因目前还不清楚。

完整代码下载:https://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
posted @   dudu  阅读(8929)  评论(16编辑  收藏  举报
编辑推荐:
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~
历史上的今天:
2006-02-06 博客园准备购买新服务器
2004-02-06 ADO.NET: Close()与Dispose() 的讨论
2004-02-06 折腾了我一个下午及吃晚饭时间的问题
2004-02-06 更新排行榜说明
2004-02-06 博客园的程序已从.Text 0.95升级到0.96
点击右上角即可分享
微信分享提示