如何拆分.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
关键注意事项
指定目标框架恢复依赖
单平台Workload安装后,dotnet restore默认会尝试解析项目中所有目标框架的依赖,若缺少对应Workload就会失败。通过-f参数指定当前任务的目标框架,让restore仅处理该平台的依赖,避免跨平台Workload缺失的问题。iOS Runner环境要求
iOS构建必须在macos-latestRunner上执行,且需要确保Xcode版本与MAUI版本兼容(macOS Runner默认安装的Xcode通常满足要求,若有特殊需求可通过actions/setup-xcode指定版本)。Workload安装优化
- 使用
--skip-manifest-update可以加快Workload安装速度,若遇到Workload版本不匹配问题,可先执行dotnet workload update更新本地Workload清单(如iOS任务中所示)。 - 若安装Workload时出现权限问题,可在命令前添加
sudo(仅macOS/Linux环境)。
- 使用
避免重复操作
构建时添加--no-restore参数,跳过已完成的restore步骤,提升构建效率。
内容的提问来源于stack exchange,提问作者Kebechet
相关产品推荐
相关产品推荐

