You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何拆分.NET MAUI的GitHub Action构建任务,仅安装对应平台Workload?

解决方案

要实现.NET MAUI项目的iOS和Android并行构建,同时避免单平台Workload安装后的dotnet restore失败,核心是让每个任务仅处理对应平台的依赖,并确保Runner环境匹配平台要求,具体配置如下:

并行任务结构

在GitHub Action中定义两个独立的Job(Android和iOS),它们默认会并行执行。注意iOS构建必须使用macOS Runner(Windows/Linux不支持iOS构建)。

完整Action配置示例

name: MAUI Parallel Build

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  android-build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Setup .NET SDK
        uses: actions/setup-dotnet@v4
        with:
          dotnet-version: '8.0.x' # 替换为你的项目使用的.NET版本

      - name: Install MAUI Android Workload
        run: dotnet workload install maui-android --skip-manifest-update

      - name: Restore Android dependencies
        run: dotnet restore YourProjectName.csproj -f net8.0-android # 指定Android目标框架

      - name: Build Android app
        run: dotnet build YourProjectName.csproj -f net8.0-android -c Release --no-restore

  ios-build:
    runs-on: macos-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Setup .NET SDK
        uses: actions/setup-dotnet@v4
        with:
          dotnet-version: '8.0.x' # 与Android任务使用相同的.NET版本

      - name: Install MAUI iOS Workload
        run: |
          dotnet workload update
          dotnet workload install maui-ios --skip-manifest-update

      - name: Restore iOS dependencies
        run: dotnet restore YourProjectName.csproj -f net8.0-ios # 指定iOS目标框架

      - name: Build iOS app
        run: dotnet build YourProjectName.csproj -f net8.0-ios -c Release --no-restore

关键注意事项

  1. 指定目标框架恢复依赖
    单平台Workload安装后,dotnet restore默认会尝试解析项目中所有目标框架的依赖,若缺少对应Workload就会失败。通过-f参数指定当前任务的目标框架,让restore仅处理该平台的依赖,避免跨平台Workload缺失的问题。

  2. iOS Runner环境要求
    iOS构建必须在macos-latest Runner上执行,且需要确保Xcode版本与MAUI版本兼容(macOS Runner默认安装的Xcode通常满足要求,若有特殊需求可通过actions/setup-xcode指定版本)。

  3. Workload安装优化

    • 使用--skip-manifest-update可以加快Workload安装速度,若遇到Workload版本不匹配问题,可先执行dotnet workload update更新本地Workload清单(如iOS任务中所示)。
    • 若安装Workload时出现权限问题,可在命令前添加sudo(仅macOS/Linux环境)。
  4. 避免重复操作
    构建时添加--no-restore参数,跳过已完成的restore步骤,提升构建效率。

内容的提问来源于stack exchange,提问作者Kebechet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 21:11:29