当前位置:网站首页 / vs2022 / 正文

ay vs2022编写插件[1/9]

时间:2022年03月01日 | 作者 : aaronyang | 分类 : vs2022 | 浏览: 2037次 | 评论 0

我使用的vs2022 preview 17.2编写,新建项目,搜索vsix,然后创建vsix项目,测试

image.png

F5直接可以运行一个空的vs2022了。

Hello World

双击source.extension.vsixmanifest文件可以编辑版本等信息

新建个命令

image.png

增加HelloCommand.cs

image.png

打开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使用


修改文字

image.png

按钮的文字改掉了,单击按钮怎么执行?打开HelloCommand.cs


找打这个位置修改

image.png

   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运行

点击

image.png

image.png

单击提示

image.png

==============================================www.ayjs.net


参考文档 Hello World 扩展教程 - Visual Studio (Windows) | Microsoft Docs






推荐您阅读更多有关于“vsix开发,”的文章

猜你喜欢

额 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

  查看权限

抖音:wpfui 工作wpf

目前在合肥企迈科技公司上班,加我QQ私聊

2023年11月网站停运,将搬到CSDN上

AYUI8全源码 Github地址:前往获取

杨洋(AaronYang简称AY,安徽六安人)AY唯一QQ:875556003和AY交流

高中学历,2010年开始web开发,2015年1月17日开始学习WPF

声明:AYUI7个人与商用免费,源码可购买。部分DEMO不免费

查看捐赠

AYUI7.X MVC教程 更新如下:

第一课 第二课 程序加密教程

标签列表