对vs2010的插件扩展(package)(一)------vsct文件的编写

VS2010插件扩展

   很久没更新博客了,最近比较忙(忙着开题,又想赚点实习经验,找了个公司实习,导师又太push,贼烦,强烈建议同学们选导师要擦亮眼睛啊啊啊啊啊!!!!)。
   
   在实习的时候,遇到一个功能就是把做的程序扩展成vs2010的一个插件,我负责的是在解决方案和项目右键打开相应功能。
   首先,我选用的是c#,建立的Visual Studio package的方案进行插件扩展,经过调研发现在vs2015版本之后使用的都是Vsix项目进行扩展。这边做一个记录。

(话不多说上图)

1.新建package项目

新建项目导航页
一步一步按照向导来

在这里插入图片描述
这里可以加一些插件描述信息,具体看个人情况。
在这里插入图片描述
这边就是选择你需要把插件扩展到哪边?是导航栏上还是右键菜单栏目上。
在这里插入图片描述
因为做一个简单记录我全都按照next了。
在这里插入图片描述
这是我的创建完成的项目树
在这里插入图片描述
首先给大家看一下完成的简单功能的项目树,大家可以对比一下。
在这里插入图片描述
2.vsct文件
Windows vsct官方链接基础好的同学可以直接去这个链接查看。

这边我只贴一些关键改动代码,可以对照改动这些,就可以实现在菜单栏的右键添加。

 <Groups>
       
      //这边我放了三个参数,填到id处就可以实现不同的位置
      <!--IDM_VS_CTXT_SOLNNODE 解决方案右键
      IDM_VS_CTXT_PROJNODE    项目右键
      IDM_VS_CTXT_ITEMNODE    项目中的文件右键
      -->
      <Group guid="guidVSPackage1CmdSet" id="MyMenuGroup" priority="0x1020">
        <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_PROJNODE"/>
      </Group>

      <Group guid="guidVSPackage1CmdSetSolution" id="MyMenuGroup" priority="0x1030">
        <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_SOLNNODE"/>
      </Group>

  </Groups>
 //这边建立两个group是为了命令分离,实现一个在菜单栏上右键,一个在项目上右键

插一句这边group,如果刚创建完成,只会有一个group组织,如果想生成多个group需要调用vs本身的工具->创建GUID,或者使用c#代码生成,这些后面会讲如何绑定。
group里的参数guid由系统生成代表命令集的标识,意思就是你多个命令可以放在一个group里,group就是一个parent节点。
id代表group本身,需要下面注册,我会按顺序一部分一部分贴出来。
Parent guid:这个group的父节点,group是在什么之下,这边"guidSHLMainMenu"代表vs的主窗体(具体我也理解的不透彻)
id呢就是我上面说的可以用来调整放在vs的哪边。

 <!--Menus section.-->
    <!--<Menus>
      <Menu guid ="guidVSPackage1CmdSet" id="TopLevelMenu" priority="0x1021" type="Menu">
        <Parent guid="guidVSPackage1CmdSet" id="MyMenuGroup"/>
        <Strings>
          <ButtonText>visual develop</ButtonText>
          <CommandName>xxxx开发</CommandName>
        </Strings>
      </Menu>
    </Menus>-->

如果同学们需要将命令都放在菜单里,这边可以添加Menus标签,本身vsct文件就是类似html文件一样,一级标签一级标签的,只要注意同属一个group就行。

接下来到重点了,

 <Buttons>   
      <Button guid="guidVSPackage1CmdSetSolution" id="Btn_CreatNewPlugin" priority="0x1031" type="Button">
        <Parent guid="guidVSPackage1CmdSetSolution" id="MyMenuGroup" />
        <Icon guid="guidImage_ADD" id="bmpPicAdd" />
        <Strings>          
          <CommandName>cmdCreatNewPlugin</CommandName>
          <ButtonText>新建插件</ButtonText>
        </Strings>
      </Button>
      <Button guid="guidVSPackage1CmdSetSolution" id="Btn_CreatNewShare" priority="0x1032" type="Button">
        <Parent guid="guidVSPackage1CmdSetSolution" id="MyMenuGroup" />
        <Icon guid="guidImage_ADD" id="bmpPicAdd" />
        <Strings>
          <CommandName>cmdCreatNewShare</CommandName>
          <ButtonText>打开xx项目</ButtonText>
        </Strings>
      </Button>     
      <Button guid="guidVSPackage1CmdSet" id="Btn_Tool" priority="0x1032" type="Button">
        <Parent guid="guidVSPackage1CmdSet" id="MyMenuGroup" />
        <Icon guid="guidImage_TOOL" id="bmpPicTool" />
        <Strings>
          <CommandName>cmdImport</CommandName>
          <ButtonText>导入插件</ButtonText>
        </Strings>
      </Button>

    <Button guid="guidVSPackage1CmdSetSolution" id="Btn_Creat" priority="0x1033" type="Button">
      <Parent guid="guidVSPackage1CmdSetSolution" id="MyMenuGroup" />
      <Icon guid="guidImage_ADD" id="bmpPicTool" />
      <Strings> 
        <CommandName>cmdICreatShareProj</CommandName>
        <ButtonText>新建xx项目</ButtonText>
      </Strings>
    </Button>
</Buttons>

上面关于button的编码不难,仔细分析一下button的"guid"决定,这个button对应的功能属于哪一个group,就是上述的group分离,"id"同样下面注册,"priority"这个属性决定站位,"type"决定类型。
parent同样如此,"Icon guid"与"id"用来给button添加icon。
"CommandName"需要在PkgCmdID.cs文件中进行注册

icon图标设置,在resource文件添加相应图片

 <!--The bitmaps section is used to define the bitmaps that are used for the commands.-->
    <Bitmaps>
      <!--  The bitmap id is defined in a way that is a little bit different from the others: 
            the declaration starts with a guid for the bitmap strip, then there is the resource id of the 
            bitmap strip containing the bitmaps and then there are the numeric ids of the elements used 
            inside a button definition. An important aspect of this declaration is that the element id 
            must be the actual index (1-based) of the bitmap inside the bitmap strip. -->
      <Bitmap guid="guidImages" href="Resources\Images_32bit.bmp" usedList="bmpPic1, bmpPic2, bmpPicSearch, bmpPicX, bmpPicArrows"/>
      <Bitmap guid="guidImage_ADD" href="Resources\001_06.bmp" usedList="bmpPicAdd"/>
      <Bitmap guid="guidImage_TOOL" href="Resources\001_20.bmp" usedList="bmpPicTool"/>

</Bitmaps>

  <Symbols>
    <!-- This is the package guid. -->
    <GuidSymbol name="guidVSPackage1Pkg" value="{1e66f76a-9c52-4b2f-b296-82ee78664627}" />
    <GuidSymbol name="guidVSPackage1CmdSetSolution" value="{DDACFD9A-FAEE-40D7-A67F-DEC8CF5FC82D}">
      <IDSymbol name="MyMenuGroup" value="0x1020" />
      <IDSymbol name="Btn_Creat" value="0x1033"/>
      <IDSymbol name="Btn_CreatNewPlugin" value="0x1034"/>
      <IDSymbol name="Btn_CreatNewShare" value="0x1035"/>    
    </GuidSymbol>
    <!-- This is the guid used to group the menu commands together -->
    <GuidSymbol name="guidVSPackage1CmdSet" value="{6e996a39-e62f-4aa6-b97a-4ec4e90d2cb5}">
      <IDSymbol name="MyMenuGroup" value="0x1020" />
      <IDSymbol name="TopLevelMenu" value="0x1021" />
      <IDSymbol name="TopLevelMenu" value="0x1021" />
      <IDSymbol name="SecLevelGroup" value="0x1030" />
      <IDSymbol name="Btn_Import" value="0x1031" />
      <IDSymbol name="Btn_Tool" value="0x1032" />
      <IDSymbol name="Btn_Creat" value="0x1033"/>
    </GuidSymbol>
    <GuidSymbol name="guidImages" value="{54ee6595-c881-4d71-a9bd-b27f8bb6a727}" >
      <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" />
    </GuidSymbol>
    <GuidSymbol name="guidImage_ADD" value="{54ee6595-c881-4d71-a9bd-b27f8bb6a728}" >
      <IDSymbol name="bmpPicAdd" value="1" />
    </GuidSymbol>
    <GuidSymbol name="guidImage_TOOL" value="{54ee6595-c881-4d71-a9bd-b27f8bb6a729}" >
      <IDSymbol name="bmpPicTool" value="1" />
    </GuidSymbol> 
</Symbols>

Symbols元素定义其他 VSCT 元素使用的 GUID 和 ID详情参考官方文档

PkgCmdID.cs
// PkgCmdID.cs
// MUST match PkgCmdID.h
using System;
namespace rptc.VSPackage1
{
    static class PkgCmdIDList
    {
        public const uint cmdImport = 0x1031;
        public const uint cmdTool = 0x1032;
        public const uint cmdCreat= 0x1033;
        public const uint cmdCreatNewPlugin = 0x1034;
        public const uint cmdCreatNewShare = 0x1035;
        public const uint cmdICreatShareProj = 0x1036; 
    };
}
Guids.cs
// Guids.cs
// MUST match guids.h
using System;

namespace rptc.VSPackage1
{
    static class GuidList
    {
        //第一个字符串guidEmptyPackagePkgString是我们Package的GUID
        public const string guidVSPackage1PkgString = "1e66f76a-9c52-4b2f-b296-82ee78664627";

        //Package的命令集的标识
        public const string guidVSPackage1CmdSetString = "6e996a39-e62f-4aa6-b97a-4ec4e90d2cb5";

        //关于solution的guid
        public const string guidVSPackage1CmdSetStringSolution = "DDACFD9A-FAEE-40D7-A67F-DEC8CF5FC82D";



        public static readonly Guid guidVSPackage1CmdSet = new Guid(guidVSPackage1CmdSetString);
        public static readonly Guid guidVSPackage1CmdSetSolution = new Guid(guidVSPackage1CmdSetStringSolution);
    };
}

这边最重要的就是新的guid的生成,可以调用vs工具->guid生成。

综上所述,给了我的项目的vsct如何生成和其他文件如何进行绑定可用的,只要对照着改,就可以看出实现效果,具体的功能如何实现的在下一章讲解。(ps:我本人也是对着官网琢磨的,有不对处欢迎指正)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值