当前位置: 首页 > news >正文

【译】利用 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/

http://www.cnnetsun.cn/news/3382648.html

相关文章:

  • Camera | 瑞芯微RK3568平台VCM马达驱动调试与故障排查指南
  • Matter协议,如何打通设备、品牌与通信协议之间的互通“藩篱”?
  • 打通 AI 编程本地运维边界,利用 MCP 协议简化环境与服务管理
  • Unity性能优化利器:MeshBaker 3.35.0网格合并实战指南
  • 深度学习进阶(十五)卷积神经网络——ResNet残差块原理与实战解析
  • C++宏定义:从基础语法到高级应用与最佳实践
  • C#中如何设置软件开机自启动
  • Windows C盘清理全攻略:从手动操作到自动化工具释放磁盘空间
  • 工业负载控制:TPD2017FN与PIC18LF45K50的智能解决方案
  • 跨平台实战:在C/C++、Python与C#中高效集成CH347DLL驱动
  • iNeuOS Vision Detect:工业视觉模型全生命周期管理平台
  • 为什么你需要Topit:3个技巧彻底掌握macOS窗口置顶神器
  • Docker构建时外网访问配置与优化指南
  • ChatGPT商业价值挖掘最后窗口期:2024Q3前必须掌握的6个合规变现路径(含GDPR/网信办双适配方案)
  • 【一线大厂Java面试题合集】第61篇-分布式链路追踪与配置中心
  • RAG技术实战:从零构建企业级检索增强生成系统
  • YOLOv8轴承缺陷检测:从模型训练到工业部署完整实践
  • 2025年LÖVR入门指南:轻量级Lua框架实现VR开发快速上手
  • 计算机系统安全实验:栈帧结构与缓冲区溢出漏洞利用
  • 压电发声器与MCU驱动方案在智能警报系统中的应用
  • TS2007FC与PIC18LF45K80在嵌入式音频系统中的应用
  • MAX11108A ADC与MKV42F微控制器的低功耗信号采集方案
  • 【单片机毕业设计】 基于 51/STM32 单片机的温湿度人体感应智能风扇控制系统设计,基于 51/STM32 单片机的环境感知智能通风装置设计与实现(012702)
  • Windows C盘空间清理与系统优化实战指南
  • YOLOv8在FPS游戏实时人物检测中的工程实践与优化
  • 基于Boost.Beast构建高性能C++ WebSocket服务器:从原理到实践
  • Linux进程与线程的本质差异及系统启动解析
  • 基于YOLOv8的家具识别系统:从原理到部署完整指南
  • 扩散模型强化学习对齐:RAM方法原理与工程实践指南
  • Cocos2d-x 4.0实现滑动拼图游戏:交互、算法与工程实践