Visual Studio Package扩展——vsct文件简介
首先我们使用向导生成一个package的扩展,里面就会发现一个vsct文件。vsct文件的全称是Visual Studio Command Table,它其实就是一个xml文件,通过一定的规则来描述visual Studio的command布局。
添加一个菜单项:
首先我们在vsct文件你们加一个菜单项:
<?xml version="1.0" encoding="utf-8"?>
<CommandTable
xmlns="http://schemas.microsoft.com/VisualStudio/2005-10-18/CommandTable"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<Extern
href="stdidcmd.h"/>
<Extern
href="vsshlids.h"/>
<Commands
package="vsPackage">
<Groups>
<Group
guid="cmdSet"
id="MyMenuGroup"
priority="0x0600">
<Parent
guid="guidSHLMainMenu"
id="IDM_VS_MENU_TOOLS"/>
</Group>
</Groups>
<Buttons>
<Button
guid="cmdSet"
id="cmdidMyCommand"
priority="0x0100"
type="Button">
<Parent
guid="cmdSet"
id="MyMenuGroup" />
<Strings>
<ButtonText>我的工具箱</ButtonText>
</Strings>
</Button>
</Buttons>
</Commands>
<Symbols>
<GuidSymbol
name="vsPackage"
value="{0b468468-bf83-4dc6-9253-ca5970142e5d}" />
<GuidSymbol
name="cmdSet"
value="{b001c53d-3e2d-4c8f-9787-73ed59a7c412}">
<IDSymbol
name="MyMenuGroup"
value="0x1020" />
<IDSymbol
name="cmdidMyCommand"
value="0x0100" />
</GuidSymbol>
</Symbols>
</CommandTable>
其中高亮部分就是我添加的内容,执行效果如下:

再次添加一个菜单项:
再次添加一个菜单项也是非常简单的,只要在Buttons里面增加一项即可:
<?xml
version="1.0"
encoding="utf-8"?>
<CommandTable
xmlns="http://schemas.microsoft.com/VisualStudio/2005-10-18/CommandTable"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<Extern
href="stdidcmd.h"/>
<Extern
href="vsshlids.h"/>
<Commands
package="vsPackage">
<Groups>
<Group
guid="cmdSet"
id="MyMenuGroup"
priority="0x0600">
<Parent
guid="guidSHLMainMenu"
id="IDM_VS_MENU_TOOLS"/>
</Group>
</Groups>
<Buttons>
<Button
guid="cmdSet"
id="cmdidMyCommand"
priority="0x0100"
type="Button">
<Parent
guid="cmdSet"
id="MyMenuGroup" />
<Strings>
<ButtonText>我的工具箱</ButtonText>
</Strings>
</Button>
<Button
guid="cmdSet"
id="cmdidMyCommand2"
priority="0x0101"
type="Button">
<Parent
guid="cmdSet"
id="MyMenuGroup" />
<Strings>
<ButtonText>我的工具箱2</ButtonText>
</Strings>
</Button>
</Buttons>
</Commands>
<Symbols>
<GuidSymbol
name="vsPackage"
value="{0b468468-bf83-4dc6-9253-ca5970142e5d}" />
<GuidSymbol
name="cmdSet"
value="{b001c53d-3e2d-4c8f-9787-73ed59a7c412}">
<IDSymbol
name="MyMenuGroup"
value="0x1020" />
<IDSymbol
name="cmdidMyCommand"
value="0x0100" />
<IDSymbol
name="cmdidMyCommand2"
value="0x0101" />
</GuidSymbol>
</Symbols>
</CommandTable>
生成的效果如下:

添加分组
现在我们来把菜单进行分组:首先在Groups项中添加一个Group,然后修改Button的ParentId即可。
<?xml
version="1.0"
encoding="utf-8"?>
<CommandTable
xmlns="http://schemas.microsoft.com/VisualStudio/2005-10-18/CommandTable"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<Extern
href="stdidcmd.h"/>
<Extern
href="vsshlids.h"/>
<Commands
package="vsPackage">
<Groups>
<Group
guid="cmdSet"
id="MyMenuGroup"
priority="0x0600">
<Parent
guid="guidSHLMainMenu"
id="IDM_VS_MENU_TOOLS"/>
</Group>
<Group
guid="cmdSet"
id="MyMenuGroup2"
priority="0x0601">
<Parent
guid="guidSHLMainMenu"
id="IDM_VS_MENU_TOOLS"/>
</Group>
</Groups>
<Buttons>
<Button
guid="cmdSet"
id="cmdidMyCommand"
priority="0x0100"
type="Button">
<Parent
guid="cmdSet"
id="MyMenuGroup" />
<Strings>
<ButtonText>我的工具箱</ButtonText>
</Strings>
</Button>
<Button
guid="cmdSet"
id="cmdidMyCommand2"
priority="0x0101"
type="Button">
<Parent
guid="cmdSet"
id="MyMenuGroup2" />
<Strings>
<ButtonText>我的工具箱2</ButtonText>
</Strings>
</Button>
</Buttons>
</Commands>
<Symbols>
<GuidSymbol
name="vsPackage"
value="{0b468468-bf83-4dc6-9253-ca5970142e5d}" />
<GuidSymbol
name="cmdSet"
value="{b001c53d-3e2d-4c8f-9787-73ed59a7c412}">
<IDSymbol
name="MyMenuGroup"
value="0x1020" />
<IDSymbol
name="MyMenuGroup2"
value="0x1021" />
<IDSymbol
name="cmdidMyCommand"
value="0x0100" />
<IDSymbol
name="cmdidMyCommand2"
value="0x0101" />
</GuidSymbol>
</Symbols>
</CommandTable>
效果如下:

在菜单中添加图标
在菜单中添加图标要稍微麻烦点:首先需要添加一个Bitmaps分组,然后修改Button的Icon属性。
<?xml
version="1.0"
encoding="utf-8"?>
<CommandTable
xmlns="http://schemas.microsoft.com/VisualStudio/2005-10-18/CommandTable"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<Extern
href="stdidcmd.h"/>
<Extern
href="vsshlids.h"/>
<Commands
package="vsPackage">
<Groups>
<Group
guid="cmdSet"
id="MyMenuGroup"
priority="0x0600">
<Parent
guid="guidSHLMainMenu"
id="IDM_VS_MENU_TOOLS"/>
</Group>
<Group
guid="cmdSet"
id="MyMenuGroup2"
priority="0x0601">
<Parent
guid="guidSHLMainMenu"
id="IDM_VS_MENU_TOOLS"/>
</Group>
</Groups>
<Buttons>
<Button
guid="cmdSet"
id="cmdidMyCommand"
priority="0x0100"
type="Button">
<Parent
guid="cmdSet"
id="MyMenuGroup" />
<Icon
guid="guidImages"
id="bmpPic1" />
<Strings>
<ButtonText>我的工具箱</ButtonText>
</Strings>
</Button>
<Button
guid="cmdSet"
id="cmdidMyCommand2"
priority="0x0101"
type="Button">
<Parent
guid="cmdSet"
id="MyMenuGroup2" />
<Icon
guid="guidImages"
id="bmpPicSearch" />
<Strings>
<ButtonText>我的工具箱2</ButtonText>
</Strings>
</Button>
</Buttons>
<Bitmaps>
<Bitmap
guid="guidImages"
href="Resources\Images.png"
usedList="bmpPic1, bmpPic2, bmpPicSearch, bmpPicX, bmpPicArrows"/>
</Bitmaps>
</Commands>
<Symbols>
<GuidSymbol
name="vsPackage"
value="{0b468468-bf83-4dc6-9253-ca5970142e5d}" />
<GuidSymbol
name="cmdSet"
value="{b001c53d-3e2d-4c8f-9787-73ed59a7c412}">
<IDSymbol
name="MyMenuGroup"
value="0x1020" />
<IDSymbol
name="MyMenuGroup2"
value="0x1021" />
<IDSymbol
name="cmdidMyCommand"
value="0x0100" />
<IDSymbol
name="cmdidMyCommand2"
value="0x0101" />
</GuidSymbol>
<GuidSymbol
name="guidImages"
value="{f3517729-ad9a-4c24-9f72-288fafa0758d}" >
<IDSymbol
name="bmpPic1"
value="1" />
<IDSymbol
name="bmpPic2"
value="2" />
<IDSymbol
name="bmpPicSearch"
value="3" />
<IDSymbol
name="bmpPicX"
value="4" />
<IDSymbol
name="bmpPicArrows"
value="5" />
<IDSymbol
name="bmpPicStrikethrough"
value="6" />
</GuidSymbol>
</Symbols>
</CommandTable>
生成的效果如下:

在菜单中关联命令
通过向导生成Package时,会自动生成一个Package的子类,重载其Initialize函数,在里面加入事件处理函数即可。向导默认已经给我们生成了一个示例,我们只需要修改其处理函数和添加新的按钮的事件即可。
protected
override
void Initialize()
{
base.Initialize();
// Add our command handlers for menu (commands must exist in the .vsct file)
OleMenuCommandService mcs = GetService(typeof(IMenuCommandService)) as
OleMenuCommandService;
if (null != mcs)
{
// Create the command for the menu item.
CommandID menuCommandID = new
CommandID(GuidList.guidVSPackage3CmdSet, (int)PkgCmdIDList.cmdidMyCommand);
MenuCommand menuItem = new
MenuCommand((s, e) => System.Windows.Forms.MessageBox.Show("hello world"), menuCommandID);
mcs.AddCommand(menuItem);
}
}
Visual Studio Package扩展——vsct文件简介的更多相关文章
- 【转】.NET(C#):浅谈程序集清单资源和RESX资源 关于单元测试的思考--Asp.Net Core单元测试最佳实践 封装自己的dapper lambda扩展-设计篇 编写自己的dapper lambda扩展-使用篇 正确理解CAP定理 Quartz.NET的使用(附源码) 整理自己的.net工具库 GC的前世与今生 Visual Studio Package 插件开发之自动生
[转].NET(C#):浅谈程序集清单资源和RESX资源 目录 程序集清单资源 RESX资源文件 使用ResourceReader和ResourceSet解析二进制资源文件 使用ResourceM ...
- Visual Studio Package 插件开发
背景 这段时间公司新做了一个支付系统,里面有N个后台服务,每次有更新修改,拷贝打包发布包"不亦乐乎"...于是我想要不要自己定制个打包插件. 部分朋友可能会认为,有现成的可以去找一 ...
- Visual Studio Package 插件开发(Visual Studio SDK)
背景 这段时间公司新做了一个支付系统,里面有N个后台服务,每次有更新修改,拷贝打包发布包“不亦乐乎”...于是我想要不要自己定制个打包插件. 部分朋友可能会认为,有现成的可以去找一个,干嘛不用持续集成 ...
- Visual Studio Package 插件开发之自动生成实体工具
前言 这一篇是VS插件基于Visual Studio SDK扩展开发的,可能有些朋友看到[生成实体]心里可能会暗想,T4模板都可以做了.动软不是已经做了么.不就是读库保存文件到指定路径么…… 我希望做 ...
- Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)
前言 这一篇是VS插件基于Visual Studio SDK扩展开发的,可能有些朋友看到[生成实体]心里可能会暗想,T4模板都可以做了.动软不是已经做了么.不就是读库保存文件到指定路径么…… 我希望做 ...
- Visual Studio Code扩展
Visual Studio Code扩展 注:本文提到的代码示例下载地址>How to create a simple extension for VS Code VS Code 是微软推出的一 ...
- visual Studio 2017 扩展开发(一)《向Visual Studio菜单栏新增一个菜单》
最近有接触到关于visual studio 2017 扩展的开发,特此记录,也是为了督促自己去深入了解其原理. 开始开发Visual Studio 扩展,在这里我安装了visual studio 20 ...
- DotNetBar for Windows Forms 12.9.0.0_冰河之刃重打包版及制作Visual Studio C#项目模板文件详解
关于 DotNetBar for Windows Forms 12.9.0.0_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版-------------- ...
- Visual Studio Team Services Demo Generator简介
Visual Studio Team Services Demo Generator简介 Visual Studio Team Services Demo Generator能够帮助我们在Visual ...
随机推荐
- [oldboy-django][2深入django]点击刷新验证码
# 点击更新验证码,只要重新在发送一个请求即可 <img src="/check_code/" onclick="updateCode(this);" w ...
- HDU 4101 Ali and Baba (思路好题)
与其说这是个博弈,倒不如说是个搜索.这题思路不错,感觉很难把情况考虑周全. 在地图外围填充一圈0,两次BFS,第一次从-1点出发,把从-1到达的0点以及包围0的那一圈石头标记出来.如下图: 1 1 1 ...
- 【bzoj4756】[Usaco2017 Jan]Promotion Counting 离散化+树状数组
原文地址:http://www.cnblogs.com/GXZlegend/p/6832263.html 题目描述 The cows have once again tried to form a s ...
- ZOJ 1280 Interesting Lines | 求两直线交点
原题: 求两直线交点 思路借鉴于:http://blog.csdn.net/zxy_snow/article/details/6341282 感谢大佬 #include<cstdio> # ...
- 纯css美化复选框,单选框,滑动条(range)
<div class="box"> <!-- 借鉴地址:http://www.cnblogs.com/xiaoxianweb/p/5465607.html --& ...
- 转 android Listview,gridview局部刷新,部分刷新 (仿QQ动态评论局部刷新)
转自:http://blog.csdn.net/jdsjlzx/article/details/45582719 众所周知Listview和Gridview的刷新界面的方式是调用adapter.not ...
- UVa10025 The ? 1 ? 2 ? ... ? n = k problem 数学思维+规律
UVa10025 ? 1 ? 2 ? ... ? n = k problem The problem Given the following formula, one can set operator ...
- UVa10891 Game of Sum
给定n个数字,A和B可以从这串数字的两端任意选数字,一次只能从一端选取.两人都采用最优策略,A先手,问A和B各自得到数字的和的差值最大为多少? 区间DP F[i][j]表示区间i~j内A能得到的最大数 ...
- [codevs_1237]餐巾计划问题
题目描述 一个餐厅在相继的N 天里,每天需用的餐巾数不尽相同.假设第i天需要ri块餐巾(i=1,2,…,N).餐厅可以购买新的餐巾,每块餐巾的费用为p分:或者把旧餐巾送到快洗部,洗一块需m天,其费用为 ...
- (计数器)NOIP模拟赛(神奇的数位DP题。。)
没有原题传送门.. 手打原题QAQ [问题描述] 一本书的页数为N,页码从1开始编起,请你求出全部页码中,用了多少个0,1,2,…,9.其中—个页码不含多余的0,如N=1234时第5页不是00 ...