发布时间:2026/9/7 9:26:38
【译】利用 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/

相关新闻

2026/9/7 2:52:22

03 LangChain入门

1、安装相关依赖 (1)安装langchain uv add langchain (2)安装对应模型的依赖。langchain支持Deepseek、Ollama、OpenAI等模型。。but 不支持阿里的qwen😭 # LangChain支持各种不同的模型,而且提供了对应…

2026/9/7 9:26:07

从概念到实现:E-R图在数据库设计全流程中的实战应用

1. E-R图:数据库设计的可视化语言 第一次接触E-R图时,我盯着那些矩形、菱形和连线看了半天——这玩意儿真的能帮我设计数据库?后来才发现,它就像建筑师的蓝图,把抽象的数据关系变成了直观的图形。E-R图(Ent…

2026/9/6 2:43:45

TSSE-driver高级配置:自定义安全策略与规则设置

TSSE-driver高级配置:自定义安全策略与规则设置 【免费下载链接】TSSE-driver provide Montage Trust & Security System Extension driver for openEuler LTS version. 项目地址: https://gitcode.com/openeuler/TSSE-driver 前往项目官网免费下载&…

2026/9/7 9:24:09

ComfyUI V30整合包:一键部署AI绘图,支持全系显卡与中文界面

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/7 9:24:09

Docker镜像优化实战:分层构建与多阶段构建减少60%体积

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/7 9:24:09

通信用阀控式密封铅酸蓄电池YDT 799-2010标准解读与运维实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/7 0:47:43

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/7 0:14:19

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/7 0:14:17

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/7 0:03:36

基于YOLOv8和PyQt5的麦穗稻穗检测识别系统设计与实现

这次我们来看一个把目标检测算法和桌面端工具结合得很典型的项目:基于 YOLOv8 PyQt5 的麦穗稻穗检测识别系统。这个项目本身不是新概念,但它的价值在于落地形态很完整。YOLOv8 负责核心的麦穗稻穗目标检测,PyQt5 负责提供可视化的桌面交互界…

2026/9/7 0:03:36

UL 1642锂电池安全标准全解析:测试项目、认证流程与避坑指南

简介:UL 1642是锂电池安全领域的重要规范,本中文版资源适合锂电池制造商、检测机构工程师及产品认证相关人员阅读,用于理解电池在设计与制造层面的安全要求、测试方法与合规要点。资源共1个PDF文件,压缩包大小834KB,便…

2026/9/7 0:03:36

BS EN 13814-1-2019游乐设施安全标准:设计与制造核心要点解析

简介:BS EN 13814-1:2019是英国采纳欧洲标准EN 13814-1:2019的正式版本,由BSI标准出版,重点规定游乐设施和游乐设备在设计与制造环节的安全准则,与BS EN 13814-2:2019、BS EN 13814-3:2019共同取代旧版BS EN 13814:2004。该标准面…

2026/9/6 11:40:10

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/6 19:33:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/6 10:19:40

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…