时间:2022年03月01日 | 作者 : aaronyang | 分类 : vs2022 | 浏览: 2037次 | 评论 0 人
我使用的vs2022 preview 17.2编写,新建项目,搜索vsix,然后创建vsix项目,测试
F5直接可以运行一个空的vs2022了。
Hello World
双击source.extension.vsixmanifest文件可以编辑版本等信息
新建个命令
增加HelloCommand.cs
打开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"> <!-- This is the file that defines the actual layout and type of the commands. It is divided in different sections (e.g. command definition, command placement, ...), with each defining a specific set of properties. See the comment before each section for more details about how to use it. --> <!-- The VSCT compiler (the tool that translates this file into the binary format that VisualStudio will consume) has the ability to run a preprocessor on the vsct file; this preprocessor is (usually) the C++ preprocessor, so it is possible to define includes and macros with the same syntax used in C++ files. Using this ability of the compiler here, we include some files defining some of the constants that we will use inside the file. --> <!--This is the file that defines the IDs for all the commands exposed by VisualStudio. --> <Extern href="stdidcmd.h"/> <!--This header contains the command ids for the menus provided by the shell. --> <Extern href="vsshlids.h"/> <!--The Commands section is where commands, menus, and menu groups are defined. This section uses a Guid to identify the package that provides the command defined inside it. --> <Commands package="guidAYUIfor2022Package"> <!-- Inside this section we have different sub-sections: one for the menus, another for the menu groups, one for the buttons (the actual commands), one for the combos and the last one for the bitmaps used. Each element is identified by a command id that is a unique pair of guid and numeric identifier; the guid part of the identifier is usually called "command set" and is used to group different command inside a logically related group; your package should define its own command set in order to avoid collisions with command ids defined by other packages. --> <!-- In this section you can define new menu groups. A menu group is a container for other menus or buttons (commands); from a visual point of view you can see the group as the part of a menu contained between two lines. The parent of a group must be a menu. --> <Groups> <Group guid="guidAYUIfor2022PackageCmdSet" id="MyMenuGroup" priority="0x0600"> <Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS"/> </Group> </Groups> <!--Buttons section. --> <!--This section defines the elements the user can interact with, like a menu command or a button or combo box in a toolbar. --> <Buttons> <!--To define a menu group you have to specify its ID, the parent menu and its display priority. The command is visible and enabled by default. If you need to change the visibility, status, etc, you can use the CommandFlag node. You can add more than one CommandFlag node e.g.: <CommandFlag>DefaultInvisible</CommandFlag> <CommandFlag>DynamicVisibility</CommandFlag> If you do not want an image next to your command, remove the Icon node /> --> <Button guid="guidAYUIfor2022PackageCmdSet" id="HelloCommandId" priority="0x0100" type="Button"> <Parent guid="guidAYUIfor2022PackageCmdSet" id="MyMenuGroup" /> <Icon guid="guidImages" id="bmpPic1" /> <Strings> <ButtonText>Invoke HelloCommand</ButtonText> </Strings> </Button> </Buttons> <!--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\HelloCommand.png" usedList="bmpPic1, bmpPic2, bmpPicSearch, bmpPicX, bmpPicArrows, bmpPicStrikethrough"/> </Bitmaps> </Commands> <Symbols> <!-- This is the package guid. --> <GuidSymbol name="guidAYUIfor2022Package" value="{e58a5116-4c01-4459-a226-09b3e966fc28}" /> <!-- This is the guid used to group the menu commands together --> <GuidSymbol name="guidAYUIfor2022PackageCmdSet" value="{12d764cc-3000-4971-bfad-25583d72ba02}"> <IDSymbol name="MyMenuGroup" value="0x1020" /> <IDSymbol name="HelloCommandId" value="0x0100" /> </GuidSymbol> <GuidSymbol name="guidImages" value="{3c002dfe-b9d4-44b6-bfe2-da50f8961b2d}" > <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>
上面有段注释翻译了下,可以了解
要定义菜单组,您必须指定其 ID、父菜单及其显示优先级。
该命令默认可见并启用。 如果您需要更改可见性、状态等,可以使用
命令标志节点。
您可以添加多个 CommandFlag 节点,例如:
<CommandFlag>默认不可见</CommandFlag>
<CommandFlag>动态可见性</CommandFlag>
如果您不希望命令旁边有图像,请删除 Icon 节点 />
整体来说,这个文件定义了你插件中用到的命令组,一个命令由 很多组,很多按钮,很多图标,由于都在不同的位置,所以都有个guid标识唯一,所以指定图标,指定组都是通过guid。
下方有一组 Symbols符号,两层深度的嵌套, 给上方guid提供的字典的,类似给guid取了别名,供上方xml使用
修改文字
按钮的文字改掉了,单击按钮怎么执行?打开HelloCommand.cs
找打这个位置修改
private void Execute(object sender, EventArgs e) { ThreadHelper.ThrowIfNotOnUIThread(); string message ="你好AY,现在是2022年"; string title = "第一个vsix提示"; // Show a message box to prove we were here VsShellUtilities.ShowMessageBox( this.package, message, title, OLEMSGICON.OLEMSGICON_INFO, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST); }
然后F5运行
点击
单击提示
==============================================www.ayjs.net
参考文档 Hello World 扩展教程 - Visual Studio (Windows) | Microsoft Docs
推荐您阅读更多有关于“vsix开发,”的文章
抖音:wpfui 工作wpf
目前在合肥企迈科技公司上班,加我QQ私聊
2023年11月网站停运,将搬到CSDN上
AYUI8全源码 Github地址:前往获取
杨洋(AaronYang简称AY,安徽六安人)和AY交流
高中学历,2010年开始web开发,2015年1月17日开始学习WPF
声明:AYUI7个人与商用免费,源码可购买。部分DEMO不免费
查看捐赠AYUI7.X MVC教程 更新如下:
第一课 第二课 程序加密教程
额 本文暂时没人评论 来添加一个吧
发表评论