VS 2005 Add-in開發隨筆
最近在改進NBear的EntityDesignToEntityVsPlugin,給EntityDesignToEntityVsPlugin增加右鍵菜單功能,在選擇EntryDesign項目時,點擊右鍵時彈出相應的菜單,通過點擊菜單項觸發項目編譯并根據實體設計類生成相應的實體類代碼,在這里給大家分享一段在VS 2005 Add-in中實現右鍵菜單的代碼:
上面代碼實現的功能是當你在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
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);
}
{
_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定義為類的成員變量才解決問題,具體原因目前還不清楚。
完整代碼下載: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
浙公網安備 33010602011771號