【译】利用 GitHub Actions 实现 Visual Studio 扩展构建自动化

  如果您正在开发和维护 Visual Studio 扩展程序,大概率都会搭建一套构建与发布工作流 —— 无论是手动操作、脚本化的,还是长期逐步拼凑而成的流程。

  本文面向扩展插件开发者,如果您希望借助 GitHub Actions 实现 VSIX 文件的构建、版本管理与发布,且流程简单、可重复执行,本篇内容将为您提供相关方案。

  我将演示如何在我自己的各类扩展程序中实现这一操作。

1

  我长期都在使用这套方法,久而久之,我把重复度最高的代码片段整理成了少量可复用的小型 action,这样就不用在每个代码仓库里重复编写相同逻辑了。

  分别为:

  - vsix-version-stamp —— 同步统一版本号

  - publish-vsixgallery —— 发布持续集成构建版本用于测试

  - publish-marketplace —— 发布至 Visual Studio 应用市场

  您可以单独使用它们,也可以搭配使用,但我通常会把三者全部用上。

  如果您想查看该内容在真实代码仓库中的配置实现,可以参考启 Start Screen 项目。

一套真实可行的工作流程

  下面是一套简易配置方案,和我目前所有扩展程序在用的配置大体一致:

name: Build
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: windows-latest

    env:
      Configuration: Release
      VsixManifestPath: src\source.extension.vsixmanifest
      VsixSourcePath: src\source.extension.cs

    steps:
      - uses: actions/checkout@v6

      - name: Setup MSBuild
        uses: microsoft/setup-msbuild@v3

      - name: Restore
        run: msbuild /t:Restore

      - name: Version stamp
        uses: madskristensen/vsix-version-stamp@v2
        with:
          manifest-file: ${{ env.VsixManifestPath }}
          vsix-token-source-file: ${{ env.VsixSourcePath }}

      - name: Build
        run: msbuild /p:Configuration=$(Configuration)

      - name: Publish to VSIX Gallery
        uses: madskristensen/publish-vsixgallery@v1
        with:
          vsix-file: '**/*.vsix'

      - name: Publish to Marketplace
        uses: madskristensen/publish-marketplace@v2
        with:
          extension-file: '**/*.vsix'
          publish-manifest-file: vs-publish.json
          personal-access-code: ${{ secrets.VS_MARKETPLACE_TOKEN }}

  这本质上就是完整流程:版本管理、构建、打包与发布。

  您可以在此处调整发布触发时机(例如,仅在发布时执行),但核心配置基本保持不变。

保持版本同步

  版本控制是很容易出错的一类工作。

  vsix-version-stamp action 会在构建过程中自动更新版本号,无需人工手动处理。

  它搭配 VSIX Synchronizer extension 插件使用效果尤为出色,该插件可基于您的 .vsixmanifest 文件生成对应的 .cs 文件。

  由此可得:

  - 唯一可信数据源

  - 代码内置对应版本

  - 发布前禁止手动修改

    这完全是非必需的,但一旦您开始使用它,就很容易离不开。

发布至 Visual Studio Marketplace

  一旦您制作好 VSIX 文件,将其发布到应用市场的操作就十分简单。

  您只需要一个秘诀:

  - VS_MARKETPLACE_TOKEN

- name: Publish to Marketplace
  uses: madskristensen/publish-marketplace@v2
  with:
    extension-file: '**/*.vsix'
    publish-manifest-file: vs-publish.json
    personal-access-code: ${{ secrets.VS_MARKETPLACE_TOKEN }}
 就这样。

  VSIX 文件包含扩展程序元数据,发布清单则补充剩余相关信息。

发布至 VSIX Gallery (用于持续集成构建与测试)

  publish-vsixgallery action 有着不同的用途。

  它用于快速分发安装包。

  我主要会在将修复方案提交至应用商店前,让他人先行测试该修复、验证相关改动时使用它。

- name: Publish to VSIX Gallery
  uses: madskristensen/publish-vsixgallery@v1
  with:
    vsix-file: '**/*.vsix'

  这正是 VSIX Gallery 的优势所在 —— 分发流程高效、占用资源少,无需完整版本发布带来的额外开销。

  也可使用您自己的 Gallery。

  VSIX Gallery 为开源项目,因此如有需要,您可以搭建专属的独立部署实例。

  GitHub Action 支持可配置的 gallery-url,因此它不会绑定至某个特定的托管 Gallery中。

- name: Publish to VSIX Gallery
  uses: madskristensen/publish-vsixgallery@v1
  with:
    vsix-file: '**/*.vsix'
    gallery-url: 'https://your-gallery.example.com'

  这使得无论您是面向公共 Gallery 发布内容,还是使用自建托管服务,都能采用同一套工作流程。

混搭

  您无需全部使用这三项操作。

  一些常见配置方案:

  Minimal

  - Build + Marketplace publish

  CI-focused

  - Build + VSIX Gallery publish

  Full pipeline

  - Version stamping + build + gallery + Marketplace

  选用适配您工作流程的方案即可。

该如何选择发布渠道

  - VSIX Gallery :用于测试、分发构建包以及快速验证

  - Visual Studio Marketplace:用于正式版本发布

  多数扩展建议同时使用两种渠道:

  - 持续集成构建包上传至 VSIX Gallery

  - 稳定版本发布至 Visual Studio Marketplace

小结

  这是我在所有扩展程序中统一使用的配置方案。

  这套方案能让流程稳定可控,便于共享构建文件,还能省去发布流程里绝大多数重复操作。

  您无需全盘照搬。可以先选用适配自身工作流的部分,再在此基础上逐步完善。

 

原文链接:https://devblogs.microsoft.com/visualstudio/automating-your-visual-studio-extension-builds-with-github-actions/

me

 

posted @ 2026-07-13 09:26  MeteorSeed  阅读(74)  评论(0)    收藏  举报