如果您正在开发和维护 Visual Studio 扩展程序,大概率都会搭建一套构建与发布工作流 ------ 无论是手动操作、脚本化的,还是长期逐步拼凑而成的流程。
本文面向扩展插件开发者,如果您希望借助 GitHub Actions 实现 VSIX 文件的构建、版本管理与发布,且流程简单、可重复执行,本篇内容将为您提供相关方案。
我将演示如何在我自己的各类扩展程序中实现这一操作。

我长期都在使用这套方法,久而久之,我把重复度最高的代码片段整理成了少量可复用的小型 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
小结
这是我在所有扩展程序中统一使用的配置方案。
这套方案能让流程稳定可控,便于共享构建文件,还能省去发布流程里绝大多数重复操作。
您无需全盘照搬。可以先选用适配自身工作流的部分,再在此基础上逐步完善。
