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

GitHub Actions部署.NET MAUI+Firebase应用签名参数缺失报错求助

部署.NET MAUI到Firebase时BuildApkSet任务缺少KeyStore参数的问题

错误信息

Run dotnet publish ProjetSport/ProjetSport/ProjetSport.csproj --framework net7.0-android --configuration Release --output ./publish/android
  dotnet publish ProjetSport/ProjetSport/ProjetSport.csproj --framework net7.0-android --configuration Release --output ./publish/android
  shell: /usr/bin/bash -e ***0***
  env:
    DOTNET_ROOT: /home/runner/.dotnet
MSBuild version 17.6.1+8ffc3fe3d for .NET
  Determining projects to restore...
  All projects are up-to-date for restore.
  ProjetSport -> /home/runner/work/GithubProjetSportMaui/GithubProjetSportMaui/ProjetSport/ProjetSport/bin/Release/net7.0-android/ProjetSport.dll
  Optimizing assemblies for size may change the behavior of the app. Be sure to test after publishing. See: https://aka.ms/dotnet-illink
  Optimizing assemblies for size may change the behavior of the app. Be sure to test after publishing. See: https://aka.ms/dotnet-illink
  Optimizing assemblies for size may change the behavior of the app. Be sure to test after publishing. See: https://aka.ms/dotnet-illink
  Optimizing assemblies for size may change the behavior of the app. Be sure to test after publishing. See: https://aka.ms/dotnet-illink
/home/runner/.dotnet/packs/Microsoft.Android.Sdk.Linux/33.0.46/tools/Xamarin.Android.Common.targets(2402,3):  

  error MSB4044: The "BuildApkSet" task was not given a value for the required parameter "KeyStore".  

 [/home/runner/work/GithubProjetSportMaui/GithubProjetSportMaui/ProjetSport/ProjetSport/ProjetSport.csproj::TargetFramework=net7.0-android]
Error: Process completed with exit code 1.

当前配置

GitHub工作流文件

name: Deploy to Firebase App Distribution

on:
  push:
    branches:
      - main

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v3

    - name: Setup .NET Core
      uses: actions/setup-dotnet@v1.8.2
      with:
        dotnet-version: '7.0.x'
  
    - name: Setup Node.js
      uses: actions/setup-node@v2
      with:
        node-version: 16
        
    - name: Check current directory
      run: |
        echo "Current directory is"
        pwd
        echo "Directory content is"
        ls -a
        
    - name: Check ProjetSport directory
      run: ls -a ProjetSport
      
    - name: Install .NET Workloads
      run: dotnet workload install maui-android

    - name: Install dependencies
      run: dotnet restore ProjetSport/ProjetSport.sln 
      
    - name: Check Keystore File
      run: ls -la ProjetSport/

    - name: Build
      run: dotnet build --configuration Release --no-restore ProjetSport/ProjetSport.sln
      env:
        KEYSTORE_PATH: ${{ github.workspace }}/My keystore file path....
        KEYSTORE_PASSWORD:  ${{ secrets.KEYSTORE_PASSWORD }}
        KEYSTORE_ALIAS: ${{ secrets.KEYSTORE_ALIAS }}
        KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
        

    - name: Publish
      run: dotnet publish ProjetSport/ProjetSport/ProjetSport.csproj --framework net7.0-android --configuration Release --output ./publish/android


    - name: Deploy to Firebase
      uses: w9jds/firebase-action@master
      with:
        args: appdistribution:distribute publish/com.companyname.projetsport-Signed.apk
      env:
        FIREBASE_TOKEN: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_JSON }}
        PROJECT_ID: My ProjectId FireBase

项目.csproj配置

<AndroidKeyStore>True</AndroidKeyStore>
<AndroidSigningKeyStore>$(KEYSTORE_PATH)</AndroidSigningKeyStore>
<AndroidSigningStorePass>$(KEYSTORE_PASSWORD)</AndroidSigningStorePass>
<AndroidSigningKeyAlias>$(KEYSTORE_ALIAS)</AndroidSigningKeyAlias>
<AndroidSigningKeyPass>$(KEY_PASSWORD)</AndroidSigningKeyPass>

解决方案

1. 将签名环境变量传递到Publish步骤

dotnet publish会独立触发构建流程,Build步骤中设置的环境变量不会自动传递到Publish步骤。可通过两种方式解决:

方式一:提升到Job级别(推荐)

将env块移到build-and-deploy job下,让所有步骤共享环境变量:

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    env:
      KEYSTORE_PATH: ${{ github.workspace }}/正确的密钥库文件路径 # 替换为实际路径
      KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
      KEYSTORE_ALIAS: ${{ secrets.KEYSTORE_ALIAS }}
      KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
    steps:
      # 后续步骤保持不变,移除Build步骤中的env块

方式二:在Publish步骤单独添加env

- name: Publish
  run: dotnet publish ProjetSport/ProjetSport/ProjetSport.csproj --framework net7.0-android --configuration Release --output ./publish/android
  env:
    KEYSTORE_PATH: ${{ github.workspace }}/正确的密钥库文件路径 # 替换为实际路径
    KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
    KEYSTORE_ALIAS: ${{ secrets.KEYSTORE_ALIAS }}
    KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}

2. 验证密钥库文件路径的正确性

确保KEYSTORE_PATH指向的文件确实存在,修改Check Keystore File步骤直接检查目标路径:

- name: Check Keystore File
  run: ls -la "${{ github.workspace }}/正确的密钥库文件路径" # 替换为实际路径

若路径包含空格,必须用引号包裹避免解析错误。

3. 限定csproj签名配置仅针对Release环境(可选)

将签名配置放在Release专属的PropertyGroup中,避免其他环境干扰:

<PropertyGroup Condition="'$(Configuration)' == 'Release'">
  <AndroidKeyStore>True</AndroidKeyStore>
  <AndroidSigningKeyStore>$(KEYSTORE_PATH)</AndroidSigningKeyStore>
  <AndroidSigningStorePass>$(KEYSTORE_PASSWORD)</AndroidSigningStorePass>
  <AndroidSigningKeyAlias>$(KEYSTORE_ALIAS)</AndroidSigningKeyAlias>
  <AndroidSigningKeyPass>$(KEY_PASSWORD)</AndroidSigningKeyPass>
</PropertyGroup>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 01:02:49