news 2026/7/14 23:37:54

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【译】利用 GitHub Actions 实现 Visual Studio 扩展构建自动化

如果您正在开发和维护 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

小结

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

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

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 23:32:08

Camera | 瑞芯微RK3568平台VCM马达驱动调试与故障排查指南

1. RK3568平台VCM马达驱动基础认知第一次接触RK3568平台的VCM马达驱动时,我对着原理图发呆了半小时——这玩意儿不就是个控制镜头伸缩的小电机吗?但真正调试起来才发现没那么简单。VCM(Voice Coil Motor)音圈马达是摄像头自动对焦…

作者头像 李华
网站建设 2026/7/14 23:31:09

Matter协议,如何打通设备、品牌与通信协议之间的互通“藩篱”?

众所周知,为人类住宅构建出一种能基于季节气候、人体节律与生活习惯等因素来进行自适应调节的人居环境,一直都是智能家居行业重要的发展方向。现阶段,随着设备智能化水平的不断提高与无线通信技术的日益成熟,智能家居行业已处于从…

作者头像 李华
网站建设 2026/7/14 23:30:01

打通 AI 编程本地运维边界,利用 MCP 协议简化环境与服务管理

现在的 AI 编程助手真的是一天一个样,写代码的效率已经越来越快了。但是语言混合技术栈(例如 Java 后端、Python 数据脚本、Go 服务网关),耗费时间的时间依然不少。 因为 AI 助手总是被局限在工作区中,不具备直接操作…

作者头像 李华
网站建设 2026/7/14 23:29:32

Unity性能优化利器:MeshBaker 3.35.0网格合并实战指南

1. 项目概述:MeshBaker,Unity开发者的性能“救星”如果你正在用Unity开发游戏,尤其是面向移动端或者WebGL平台,那么“性能”这个词一定是你开发日志里的常客。项目做着做着,Draw Call(绘制调用)…

作者头像 李华
网站建设 2026/7/14 23:29:18

深度学习进阶(十五)卷积神经网络——ResNet残差块原理与实战解析

1. 从网络退化问题到残差学习革命2015年之前,深度学习领域存在一个令人困惑的现象:当神经网络层数增加到一定程度时,模型的训练误差不降反升。这个问题在ImageNet竞赛中尤为明显,VGG等传统网络在超过19层后性能开始下降。我当时在…

作者头像 李华
网站建设 2026/7/14 23:24:11

C++宏定义:从基础语法到高级应用与最佳实践

1. 项目概述:为什么宏定义是C程序员绕不开的坎?如果你写过C,尤其是接触过一些大型项目或者开源库的源码,比如STL、Boost或者一些游戏引擎的底层代码,那你一定对宏定义不陌生。那些以#define开头的、看起来像魔法一样的…

作者头像 李华