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 ...
随机推荐
- 决策树之CART算法
顾名思义,CART算法(classification and regression tree)分类和回归算法,是一种应用广泛的决策树学习方法,既然是一种决策树学习方法,必然也满足决策树的几大步骤,即: ...
- CentOS 6.3安装配置LAMP服务器(Linux+Apache+MySQL+PHP5)
服务器系统环境:CentOS 6.3 客户端系统环境:Windows 7 ultimate(x86)sp1 简体中文旗舰版 ※ 本文档描述了如何在Linux服务器配置Apache.Mysql.PHP ...
- fisheye在centos上的安装
目录 描述 部署过程 安装及配置 破解 添加存贮库 在jira上配置 描述 Fisheye 一个源代码库深度查看软件,它可以挖掘源代码库中的有用信息,呈现在Web浏览器界面上. Crucible是一个 ...
- edp 基于node.js和npm的前端开发平台
edp能做什么? 简洁的项目创建及包管理,多种工具进行本地调试,快速项目构建及代码检测,可扩展插件... 1. 安装 $ npm install -g edp 2. 包管理-导入依赖包 >edp ...
- Android社会化分享功能的实现步骤
众所周知,互联网是一个资源共享的地方,在网络上,我们可以分享我们所有认为好的资源.而随着互联网信息爆发式的增长,我们习惯了一键分享功能,比如:微博分享.微信分享.QQ空间分享.人人网分享等等.由此可见 ...
- LeetCode -- Product of Array Except Self My Submissions Question
Question: Given an array of n integers where n > 1, nums, return an array output such that output ...
- [bzoj5472] 数列
Description 输入一个长度为n的数组{ai}(1 <= i <= n) 问有多少个长度为n的数组{xi}(1 <= i <= n),满足1 <= xi < ...
- [codeforces934E]A Colourful Prospect
[codeforces934E]A Colourful Prospect 试题描述 Firecrackers scare Nian the monster, but they're wayyyyy t ...
- html状态码
100——客户必须继续发出请求101——客户要求服务器根据请求转换HTTP协议版本 200——交易成功201——提示知道新文件的URL202——接受和处理.但处理未完成203——返回信息不确定或不完整 ...
- python module :shelve
shelve 是一个 key-value 的数据库. 操作方法和字典几乎一致. shelve 模块功能:以 key - value 的方式存储数据. 写数据 >>> import s ...