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

  如果您正在开发和维护 Visual Studio 扩展程序,大概率都会搭建一套构建与发布工作流 —— 无论是手动操作、脚本化的,还是长期逐步拼凑而成的流程。

  本文面向扩展插件开发者,如果您希望借助 GitHub Actions 实现 VSIX 文件的构建、版本管理与发布,且流程简单、可重复执行,本篇内容将为您提供相关方案。

  我将演示如何在我自己的各类扩展程序中实现这一操作。

1

  我长期都在使用这套方法,久而久之,我把重复度最高的代码片段整理成了少量可复用的小型 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/

下载代码方式:https://pan.quark.cn/s/dd3561eca308 在软件开发领域,面向对象编程(OOP)是一种普遍采纳的结构化方法,它使得开发者能够借助模拟现实环境中的实体和关系来构建软件系统。在本案例中,我们观察到的是一个关于借助抽象类来执行不同几何图形面积求解的实践应用。现在,让我们详细分析这一议题。 标题 "应用抽象类计算面积" 清晰地表明我们将要讨论一个抽象类,此类设定了一个用于测量图形面积的标准函数,但并未提供实际的执行过程。抽象类在诸如C#或Java等编程语言中通常借助`abstract`修饰符进行声明,它们无法直接创建对象实例,仅能作为其他类的基础模板。 描述部分提及的"图形界面应用"暗示这是一个基于视觉用户界面(GUI)的系统,可能运用了.NET Framework的Windows Forms或WPF技术,或者是Java平台的Swing或JavaFX框架。在这样环境下,用户能够通过视觉元素与这些几何体进行互动,例如输入相关尺寸并观看到计算得出的面积值。 抽象类“几何体”内嵌了“计算面积”这一抽象函数。在代码层面,这可以被表述为: ```csharp public abstract class GeometricShape { public abstract double CalculateArea(); } ``` 随后,有三个派生类:圆(Circle)、矩形(Rectangle)和三角形(Triangle),它们各自提供了这个抽象函数的具体实现。比如,圆的面积是通过π乘以半径的平方得到的,矩形的面积是长和宽的乘积,而三角形的面积可能是底乘以高再除以2的结果。这些类将提供具体实现来计算它们各自的面积: ```csharp p...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值