【译】利用 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/checkoutv6 - name: Setup MSBuild uses: microsoft/setup-msbuildv3 - name: Restore run: msbuild /t:Restore - name: Version stamp uses: madskristensen/vsix-version-stampv2 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-vsixgalleryv1 with: vsix-file: **/*.vsix - name: Publish to Marketplace uses: madskristensen/publish-marketplacev2 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-marketplacev2 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-vsixgalleryv1 with: vsix-file: **/*.vsix这正是 VSIX Gallery 的优势所在 —— 分发流程高效、占用资源少无需完整版本发布带来的额外开销。也可使用您自己的 Gallery。VSIX Gallery 为开源项目因此如有需要您可以搭建专属的独立部署实例。GitHub Action 支持可配置的 gallery-url因此它不会绑定至某个特定的托管 Gallery中。- name: Publish to VSIX Gallery uses: madskristensen/publish-vsixgalleryv1 with: vsix-file: **/*.vsix gallery-url: https://your-gallery.example.com这使得无论您是面向公共 Gallery 发布内容还是使用自建托管服务都能采用同一套工作流程。混搭您无需全部使用这三项操作。一些常见配置方案Minimal- Build Marketplace publishCI-focused- Build VSIX Gallery publishFull 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/

相关新闻

最新新闻

AI大模型推理性能优化:从Transformer架构到KV缓存算法实战

AI大模型推理性能优化:从Transformer架构到KV缓存算法实战

在实际项目中部署AI大模型时,很多开发者会遇到推理性能瓶颈问题——模型响应慢、资源消耗大、并发支持差。这些问题往往源于对底层数据结构与算法优化理解不足。本文将系统解析AI大模型推理过程中的关键技术点,结合数据结构与算法优化思路,提…

2026/7/15 2:48:46
Python游戏脚本开发指南:从图像识别到内存读取的自动化实践

Python游戏脚本开发指南:从图像识别到内存读取的自动化实践

1. 项目概述:为什么选择Python来写游戏脚本?如果你对游戏自动化、辅助工具或者“外挂”有过那么一丝好奇,但又觉得C、易语言这些门槛太高,那Python可能就是为你量身定做的敲门砖。我最早接触游戏脚本,是因为十几年前玩…

2026/7/15 2:48:46
从0到1搭建儿童AI情感陪伴系统:技术架构与SaaS商业落地实战

从0到1搭建儿童AI情感陪伴系统:技术架构与SaaS商业落地实战

在儿童手表硬件同质化严重的当下,如何基于现有的微信生态,为智能硬件赋予“软性情感陪伴”能力?这是我们在做“AI小话家”开源项目时遇到的核心问题。这里简单复盘一下我们的技术路径,主要涉及三个层面的选型与取舍:1.…

2026/7/15 2:48:46
从“杞人忧天”到“黑洞焦虑”:一个现代技术人的“忧患意识”修炼手册

从“杞人忧天”到“黑洞焦虑”:一个现代技术人的“忧患意识”修炼手册

1. 技术人的"忧患意识"从何而来十年前我刚入行做系统架构时,总被前辈批评"想太多"。当时为了一个简单的登录功能,我坚持要加异地容灾方案,团队都觉得我在小题大做。直到某天机房真的光纤被挖断,全公司只有我的…

2026/7/15 2:48:46
《爱来了别错过2026》 在线观看

《爱来了别错过2026》 在线观看

《爱来了别错过2026》 在线观看资料可在线播放《爱来了别错过2026》https://tool.nineya.com/s/1jskahdln English Practice School Romance Edition 以《爱来了别错过2026》为主题的英语练习,边追剧边学英语。Part 1 Vocabulary Choose the best word.When love …

2026/7/15 2:48:46
本体防火墙:用OWL+Rust构建AI代理语义边界控制系统

本体防火墙:用OWL+Rust构建AI代理语义边界控制系统

1. 项目概述:这不是一个“插件”,而是一道语义边界的物理屏障OntoGuard 这个名字里,“Onto”直指本体(Ontology),不是玄学里的“存在论”,而是知识工程里那个定义概念、关系与约束的严格结构化模…

2026/7/15 2:43:45

月新闻