首先我们使用向导生成一个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文件简介的更多相关文章

  1. 【转】.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 ...

  2. Visual Studio Package 插件开发

    背景 这段时间公司新做了一个支付系统,里面有N个后台服务,每次有更新修改,拷贝打包发布包"不亦乐乎"...于是我想要不要自己定制个打包插件. 部分朋友可能会认为,有现成的可以去找一 ...

  3. Visual Studio Package 插件开发(Visual Studio SDK)

    背景 这段时间公司新做了一个支付系统,里面有N个后台服务,每次有更新修改,拷贝打包发布包“不亦乐乎”...于是我想要不要自己定制个打包插件. 部分朋友可能会认为,有现成的可以去找一个,干嘛不用持续集成 ...

  4. Visual Studio Package 插件开发之自动生成实体工具

    前言 这一篇是VS插件基于Visual Studio SDK扩展开发的,可能有些朋友看到[生成实体]心里可能会暗想,T4模板都可以做了.动软不是已经做了么.不就是读库保存文件到指定路径么…… 我希望做 ...

  5. Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)

    前言 这一篇是VS插件基于Visual Studio SDK扩展开发的,可能有些朋友看到[生成实体]心里可能会暗想,T4模板都可以做了.动软不是已经做了么.不就是读库保存文件到指定路径么…… 我希望做 ...

  6. Visual Studio Code扩展

    Visual Studio Code扩展 注:本文提到的代码示例下载地址>How to create a simple extension for VS Code VS Code 是微软推出的一 ...

  7. visual Studio 2017 扩展开发(一)《向Visual Studio菜单栏新增一个菜单》

    最近有接触到关于visual studio 2017 扩展的开发,特此记录,也是为了督促自己去深入了解其原理. 开始开发Visual Studio 扩展,在这里我安装了visual studio 20 ...

  8. DotNetBar for Windows Forms 12.9.0.0_冰河之刃重打包版及制作Visual Studio C#项目模板文件详解

    关于 DotNetBar for Windows Forms 12.9.0.0_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版-------------- ...

  9. Visual Studio Team Services Demo Generator简介

    Visual Studio Team Services Demo Generator简介 Visual Studio Team Services Demo Generator能够帮助我们在Visual ...

随机推荐

  1. 201621123034 《Java程序设计》第9周学习总结

    作业09-集合与泛型 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 答:Map的HashMap中使用嵌套类static class Node<K,V& ...

  2. PAT 甲级 1011 World Cup Betting

    https://pintia.cn/problem-sets/994805342720868352/problems/994805504927186944 With the 2010 FIFA Wor ...

  3. C++11 tuple元组

    C++11 tuple 元组 tuple容器(元组), 是表示元组容器, 是不包含任何结构的,快速而低质(粗制滥造, quick and dirty)的, 可以用于函数返回多个返回值; tuple容器 ...

  4. BZOJ 3052: [wc2013]糖果公园 | 树上莫队

    题目: UOJ也能评测 题解 请看代码 #include<cstdio> #include<algorithm> #include<cstring> #includ ...

  5. POJ 3630 Phone List | Trie 树

    题目: 给定 n 个长度不超过 10 的数字串,问其中是否存在两个数字串 S, T ,使得 S 是 T 的前缀.多组数据,数据组数不超过 40. 题解: 前缀问题一般都用Trie树解决: 所以跑一个T ...

  6. 【转】百度统计js被劫持用来DDOS Github

    原文链接:http://drops.wooyun.org/papers/5398 今天中午刷着全国最大的信息安全从业人员同性交友社区zone.wooyun.org的时候,忽然浏览器每隔2秒就不断的弹窗 ...

  7. Pty的字符串(string)

    题目描述 在神秘的东方有一棵奇葩的树,它有一个固定的根节点(编号为1).树的每条边上都是一个字符,字符为a,b,c中的一个,你可以从树上的任意一个点出发,然后沿着远离根的边往下行走,在任意一个节点停止 ...

  8. powerdesign相关

    1.安装程序和汉化放百度云了 2.打印错误处理 http://jingyan.baidu.com/article/c45ad29cd84e4b051753e2c3.html 3.导出sql http: ...

  9. java爬虫--使用正则表达式获取网页中的email

    package com.enation.newtest; import java.io.*; import java.util.regex.*; import java.net.*; public c ...

  10. hihoCoder挑战赛34 B题(快速求第k轮冒泡排序的结果)

    官方题解:https://media.hihocoder.com/contests/challenge34/tutorials-previewed.pdf 题目链接:http://hihocoder. ...