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
相关产品推荐
相关产品推荐

