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 ...
随机推荐
- LightGBM的并行优化--机器学习-周振洋
LightGBM的并行优化 上一篇文章介绍了LightGBM算法的特点,总结起来LightGBM采用Histogram算法进行特征选择以及采用Leaf-wise的决策树生长策略,使其在一批以树模型为基 ...
- leetcode 208. 实现 Trie (前缀树)
实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作. 示例: Trie trie = new Trie(); trie.insert(" ...
- Android事件分发机制详解(2)----分析ViewGruop的事件分发
首先,我们需要 知道什么是ViewGroup,它和普通的View有什么区别? ViewGroup就是一组View的集合,它包含很多子View和ViewGroup,是Android 所有布局的父类或间接 ...
- poj 3080 kmp求解多个字符串的最长公共字串,(数据小,有点小暴力 16ms)
Blue Jeans Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14113 Accepted: 6260 Descr ...
- 使用SecureCRT设置linux系统登录的ssh公钥认证
1.修改ssh配置文件/etc/ssh/sshd_configRSAAuthentication yes //使用RSA加密算法PubkeyAu ...
- 【bzoj4010】[HNOI2015]菜肴制作 拓扑排序+堆
题目描述 给你一张有向图,问:编号-位置序(即每个编号的位置对应的序列)最小(例如1优先出现在前面,1位置相同的2优先出现在前面,以此类推)的拓扑序是什么? 输入 第一行是一个正整数D,表示数据组数. ...
- 《c程序设计语言》读书笔记-5.4-指针实现strend
#include <stdio.h> #include <math.h> #include <stdlib.h> #include <string.h> ...
- 让DIV的滚动条自动滚动到最底部 - 3种方法
要制作一个在线聊天的程序,在做最后的修饰时,需要对获得的信息即时滚动以保证用户总能看到最新消息. 聊天程序是基于AJAX设计的,没有用框架,消息容器是一个DIV,所以问题就在于如何控制DIV的滚动条. ...
- 疫情控制(NOIP2012)庆祝2012满贯!٩(๑•◡-๑)۶ⒽⓤⒼ
丧病至极的D2T3啊! 好吧~ 先放个传送门~ 原题传送门 好吧,这道题呢.. 根据题意我们可以很明显的看出来 军队往上走的越多(在没到根节点之前),效益一定越大.. 所以可以分情况讨论: 对于无法走 ...
- 第2章 掌握C++
参考: https://blog.csdn.net/u014162133/article/details/46573873 1.C++主要特点: 封装性(Encapsulation):把数据与操作数据 ...