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

Xamarin.Android Azure构建使用MSBuild 17失败求助

解决Xamarin.Forms Azure流水线MSBuild 17.0构建失败问题

问题概述

使用macos-12代理的Azure构建流水线,将XamarinAndroid@1任务的msbuildVersionOption从15.0改为17.0后,构建报错:

##[error]Error: The process '/Library/Frameworks/Mono.framework/Versions/Current/Commands/xbuild' failed with exit code 1
Errors:
/Users/runner/work/1/s/Droid/MySample.Droid.csproj: error : /Users/runner/work/1/s/Droid/MySample.Droid.csproj: /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.CSharp.targets: Project file could not be imported, it was being imported by /Users/runner/work/1/s/Droid/MySample.Droid.csproj: Xamarin.Android.Common.targets: Project file could not be imported, it was being imported by /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.CSharp.targets: Xamarin.Android.AvailableItems.targets: Project file could not be imported, it was being imported by /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.targets: The attribute "TfmSpecificPackageFile" in element <"None> is unrecognized.

原因分析

该错误源于Xamarin.Android版本与MSBuild 17.0不兼容:

  • TfmSpecificPackageFile是MSBuild 17引入的新属性,旧版Xamarin.Android的.targets文件未包含对该属性的定义
  • macos-12代理预装的Mono/Xamarin.Android版本偏旧,无法适配MSBuild 17的新特性

解决方案

1. 升级项目的Xamarin.Android版本

打开Xamarin.Forms Android项目,将Xamarin.Android SDK和依赖包升级到支持MSBuild 17的版本(建议Xamarin.Android 13.0及以上):

  • 右键Android项目 → 属性 → 应用程序,确认目标框架为Android 13.0 (Tiramisu)或更高
  • 打开NuGet包管理器,更新Xamarin.Android.Support.*、Xamarin.Essentials等依赖到最新兼容版本

2. 替换流水线任务为MSBuild@1

用MSBuild@1任务替代XamarinAndroid@1,直接调用MSBuild 17.0构建,规避xbuild的兼容性问题:

steps:
- task: MSBuild@1
  displayName: '$(PackageName) - Building Droid'
  inputs:
    solution: 'Droid/MySample.Droid.csproj'
    configuration: 'Release'
    clean: true
    msbuildVersion: '17.0'
    msbuildArchitecture: 'x64'
    jdkVersionOption: '1.11'

3. 升级代理上的Xamarin.Android环境

若必须使用XamarinAndroid@1任务,可在流水线中添加bash任务更新代理环境:

steps:
- bash: |
    sudo $ANDROID_HOME/tools/bin/sdkmanager --update
    sudo $ANDROID_HOME/tools/bin/sdkmanager "platforms;android-33" "build-tools;33.0.2" "extras;google;m2repository" "extras;android;m2repository"
    sudo nuget update -self
    sudo nuget install Xamarin.Android -Version 13.2.0.11
  displayName: 'Update Android SDK and Xamarin.Android'

- task: XamarinAndroid@1
  displayName: '$(PackageName) - Building Droid'
  inputs:
    projectFile: Droid/MySample.Droid.csproj
    configuration: 'Release'
    clean: true
    msbuildVersionOption: 17.0
    jdkVersionOption: 1.11

4. 修正项目文件的.targets引用

手动编辑MySample.Droid.csproj,确保导入的.targets路径与升级后的Xamarin.Android版本匹配:
移除旧导入语句,替换为:

<Import Project="$(NuGetPackageRoot)\xamarin.android\13.2.0.11\build\Xamarin.Android.CSharp.targets" />

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 05:35:26