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

适合 .NET 开发者用的 GitHub Actions(时不时更新)

本文制作并长期更新适合 .NET 开发者用的 GitHub Actions。整理方式为整个文件而不是单个可用的模块,这样可以方便大家以最快的速度为自己的项目添加 GitHub Actions。当然自己改改也可。


本文内容

    • .NET 编译与单元测试(全平台)
    • .NET 编译与单元测试(仅限 Windows 系统下的编译)
    • NuGet Push
    • 自带环境

.NET 编译与单元测试(全平台)

功能:编译你的 .NET 项目,并进行单元测试。

适用:如果你的项目是纯 .NET 项目,无论项目是 .NET Core 还是 .NET Framework,无论是 Asp.NET Core 还是 WPF / Windows Forms,都可以用这个文件来编译和单元测试。

要求:仓库的根目录有且仅有一个 sln 文件,且这个文件包含了所有重要的项目和单元测试。

{% raw %}

name: .NET Build & Test

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:
    strategy:
      matrix:
        configuration: [Debug, Release]
    runs-on: windows-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Setup
        uses: actions/setup-dotnet@v1
      - name: Build
        run: dotnet build --configuration $env:Configuration
        env:
          Configuration: ${{ matrix.configuration }}
      - name: Test
        run: dotnet test --configuration $env:Configuration
        env:
          Configuration: ${{ matrix.configuration }}

{% endraw %}

.NET 编译与单元测试(仅限 Windows 系统下的编译)

功能:编译你的 .NET 项目,并进行单元测试。

适用:如果你的项目是纯 .NET 项目,无论项目是 .NET Core 还是 .NET Framework,无论是 Asp.NET Core 还是 WPF / Windows Forms,都可以用这个文件来编译和单元测试。

要求:仓库的根目录有且仅有一个 sln 文件,且这个文件包含了所有重要的项目和单元测试。

{% raw %}

name: .NET Build & Test

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:

  build:

    strategy:
      matrix:
        configuration: [Debug, Release]

    runs-on: windows-latest

    steps:
    - name: Checkout
      uses: actions/checkout@v2
      with:
        fetch-depth: 0

    # 安装 .NET Core
    - name: Install .NET Core
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 3.1.202

    # 添加 MSBuild.exe 到环境变量: https://github.com/microsoft/setup-msbuild
    - name: Setup MSBuild.exe
      uses: microsoft/setup-msbuild@2008f912f56e61277eefaac6d1888b750582aa16

    # 安装 NuGet
    - name: Setup NuGet
      uses: nuget/setup-nuget@v1
      with:
        nuget-api-key: ${{ secrets.NuGetAPIKey }}
        nuget-version: '5.x'

    # 还原 NuGet 包
    - name: NuGet restore
      run: nuget restore

    # 编译整个项目
    - name: Build the solution
      run: msbuild /p:Configuration=$env:Configuration
      env:
        Configuration: ${{ matrix.configuration }}

    # 执行单元测试
    - name: Execute unit tests
      run: dotnet test -c $env:Configuration
      env:
        Configuration: ${{ matrix.configuration }}

{% endraw %}

在这个文件中:

  1. 我们测试编译了 DEBUG 和 Release 两个不同的环境
  2. 我们使用的是 msbuild 来编译,因为这样对旧项目的兼容性最好,当然也就失去了跨平台的能力

NuGet Push

功能:如果你的项目是要推送 NuGet 包的,那么可以使用此工作流推送 NuGet 包。

适用:任何 .NET 项目。

要求:仓库的根目录有且仅有一个 sln 文件。

{% raw %}

name: NuGet Push

on:
  push:
    branches:
      - master

jobs:
  build:
    runs-on: windows-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Setup
        uses: actions/setup-dotnet@v1
      - name: Pack
        run: dotnet build --configuration Release
      - name: Push
        run: dotnet nuget push .\bin\Release\*.nupkg --source https://api.nuget.org/v3/index.json --api-key ${{ secrets.NuGetAPIKey }} --skip-duplicate --no-symbols 1

{% endraw %}

关于最后的那个参数 1,很魔性,只要有任何一个值都行。参见:dotnet nuget push - Missing value for option · Issue #4864 · NuGet/Home。

自带环境

GitHub Actions 自带了很多环境可以用,这些自带的环境不需要再去配了:

  • virtual-environments/Windows2019-Readme.md at master · actions/virtual-environments

我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • 在 CMD 里根据进程名杀掉进程
  • 在 PowerShell 里根据进程名杀掉进程
  • 在制作多框架项目的 NuGet 包时应该注意的问题(buildMultiTargeting TargetFrameworks)
  • 专业团队:推荐一个网站,生成巨幅文字注释
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • 通过设置启用 Visual Studio 默认关闭的大量强大的功能提升开发效率
  • 使用 SetWindowCompositionAttribute 来控制程序的窗口边框和背景(可以做 Acrylic 亚克力效果、模糊效果、主题色效果等)
  • input 不能为空 js_我用JS刷LeetCode | Day 9 | Implement strStr()
  • 宝塔同时安装苹果cms海洋cms_maccms安装了后接下来做什么?
  • hive 修改表的存储格式_Hive存储格式
  • mac redis 链接_2018 MAC下安装Redis和Redis可视化工具RDM并连接Redis
  • python的lib文件夹在哪_如何导入模块中的lib文件夹
  • heidisql连接不是本地_本地备份与云备份:选择您的备份计划
  • ibaties 更新 数据类型不一致_关于Python 3.9,那些你不知道的事
  • join为什么每个字符都分割了 js_【项目总结】之——JS分割字符串
  • 【RocksDB】TransactionDB源码分析
  • Apache Zeppelin在Apache Trafodion上的可视化
  • bearychat的java client
  • css选择器
  • Java|序列化异常StreamCorruptedException的解决方法
  • TCP拥塞控制
  • 从0实现一个tiny react(三)生命周期
  • 对超线程几个不同角度的解释
  • 高度不固定时垂直居中
  • 排序算法之--选择排序
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 由插件封装引出的一丢丢思考
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (分布式缓存)Redis持久化
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (转)树状数组
  • .net framework profiles /.net framework 配置
  • .NET 设计模式初探
  • :=
  • @hook扩展分析
  • @WebService和@WebMethod注解的用法
  • [ C++ ] STL---仿函数与priority_queue
  • [<死锁专题>]
  • [2669]2-2 Time类的定义
  • [android] 请求码和结果码的作用
  • [AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试
  • [C++随笔录] 红黑树
  • [C语言]——柔性数组
  • [hdu 3746] Cyclic Nacklace [kmp]
  • [HNOI2008]Cards
  • [HXPCTF 2021]includer‘s revenge
  • [IE编程] WebBrowser控件中设置页面的缩放
  • [iOS开发]iOS中TabBar中间按钮凸起的实现
  • [Linux] 常用命令--版本信息/关机重启/目录/文件操作
  • [pyqt5]pyqt5设置窗口背景图片后上面所有图片都会变成和背景图片一样
  • [Repo Git] manifests的写法
  • [Study]Vue
  • [Unity 3D] Unity 3D 性能优化(三)