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生成。文章来源:https://www.toymoban.com/news/detail-464028.html
综上所述,给了我的项目的vsct如何生成和其他文件如何进行绑定可用的,只要对照着改,就可以看出实现效果,具体的功能如何实现的在下一章讲解。(ps:我本人也是对着官网琢磨的,有不对处欢迎指正)文章来源地址https://www.toymoban.com/news/detail-464028.html
到了这里,关于对vs2010的插件扩展(package)(一)------vsct文件的编写的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!