求助:Azure DevOps Pipeline构建.NET MAUI iOS应用遇版本兼容问题
解决Azure DevOps Pipeline构建.NET MAUI iOS时Xcode版本不匹配问题
问题核心
使用Azure DevOps托管macOS代理(Macos-15/macos-26)构建.NET MAUI iOS应用时,dotnet workload install会自动拉取最新的.NET for iOS SDK(版本26.4.9015),但该版本要求的Xcode 26.4尚未在托管代理中提供;切换至Xcode 26.3/26.0.1时,又会因为.NET for iOS版本过高而触发版本不兼容报错。
可行解决方案
1. 固定.NET for iOS工作负载版本到代理兼容的Xcode版本
不要直接执行dotnet workload install,而是指定与代理现有Xcode版本匹配的.NET for iOS工作负载版本。比如代理中存在Xcode 26.3,就安装对应大版本的.NET for iOS(26.3.x)。
修改流水线步骤如下:
steps: - task: UseDotNet@2 displayName: 'Use .NET Core SDK 9.0.300' inputs: version: 9.0.300 - script: | # 指定代理中存在的Xcode路径,示例为Xcode 26.3 sudo xcode-select -s /Applications/Xcode_26.3.app # 安装与Xcode匹配的.NET for iOS工作负载版本 dotnet workload install ios --version 26.3.9014 displayName: 'Set Xcode Version & Install Compatible MAUI Workload'
2. 先确认代理中可用的Xcode版本
在流水线开头添加步骤,列出代理中所有已安装的Xcode目录,避免指定不存在的路径:
- script: | ls -la /Applications/ | grep Xcode displayName: 'List Available Xcode Versions on Agent'
执行后可获取代理中实际存在的Xcode目录名称,比如Xcode_26.3.app、Xcode_26.0.1.app,再用对应路径执行xcode-select。
3. 项目层面禁用工作负载自动更新
在项目根目录的Directory.Build.props文件中添加配置,强制使用指定版本的.NET for iOS,防止流水线自动拉取最新版本:
<Project> <PropertyGroup> <MauiIosSdkVersion>26.3.9014</MauiIosSdkVersion> </PropertyGroup> </Project>
关键注意点
- .NET for iOS与Xcode版本存在严格对应关系,必须保证两者大版本一致(如Xcode 26.3对应.NET for iOS 26.3.x系列)
- Azure DevOps托管代理的Xcode版本更新有延迟,不要盲目使用最新的.NET工作负载,先确认代理可用的Xcode版本再匹配对应工作负载
内容的提问来源于stack exchange,提问作者Vinoth Swami
相关产品推荐
相关产品推荐

