我们有一个Xamarin Forms项目,该项目在VS20198中可以正常运行,但iOS构建在Azure DevOps(ADO)中托管的Mac上失败
查看ADO build的输出
2019-10-15T17:04:27.5851930Z MTOUCH : error MT2001: Could not link assemblies. Reason: Error while processing references of 'ProjectBreatheApp.iOS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' [/Users/vsts/agent/2.158.0/work/1/s/ProjectBreatheApp/ProjectBreatheApp.iOS/ProjectBreatheApp.iOS.csproj]
2019-10-15T17:04:27.5852990Z --- inner exception
2019-10-15T17:04:27.5899390Z Mono.Linker.LoadException: Error while processing references of 'ProjectBreatheApp.iOS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' ---> Mono.Linker.LoadException: Error while processing references of 'ProjectBreatheApp.Forms, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' ---> Mono.Linker.LoadException: Error while processing references of 'FreshMvvm, Version=1.0.7010.22624, Culture=neutral, PublicKeyToken=null' ---> Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly: 'System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' ---> Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly: 'System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'
2019-10-15T17:04:27.5901640Z at Mono.Cecil.BaseAssemblyResolver.Resolve (Mono.Cecil.AssemblyNameReference name, Mono.Cecil.ReaderParameters parameters) [0x00105] in <c00644197a08419abff2c4cf790b9f65>:0
2019-10-15T17:04:27.5903940Z at Mono.Linker.AssemblyResolver.Resolve (Mono.Cecil.AssemblyNameReference name, Mono.Cecil.ReaderParameters parameters) [0x00071] in /Users/builder/jenkins/workspace/xamarin-macios/xamarin-macios/external/mono/external/linker/linker/Linker/AssemblyResolver.cs:80
2019-10-15T17:04:27.5904560Z at Mono.Linker.LinkContext.Resolve (Mono.Cecil.IMetadataScope scope) [0x00009] in /Users/builder/jenkins/workspace/xamarin-macios/xamarin-macios/external/mono/external/linker/linker/Linker/LinkContext.cs:210
2019-10-15T17:04:27.5906030Z --- End of inner exception stack trace ---
我可以看到它找不到4.2.0.0版本的STTE。该版本不存在,我不相信它曾经存在。我如何告诉该版本采用其他版本?
我们没有直接引用STTE,我们正在使用的库,链接堆栈跟踪中的FreshMVVM不是直接引用它,更重要的是,我确实有一个使用简单的XF项目的ADO iOS构建版本,确实使用了FreshMVVM
许多其他人在参考4.2.0.0 STTE时遇到了问题,他们建议对文件进行明确的参考。我无法解决这个问题。
答案 0 :(得分:2)
我在System.Threading.Tasks.Extensions中遇到了类似的问题,我的项目在本地构建良好,但在Azure Pipelines中却没有。
问题在于,代理“ macOS-10.14”默认情况下不使用最新的Mono和Xamarin.iOS SDK。
通过切换到最新的XCode(11.1),NetCore 2.x,Mono(6.4)和Xamarin。iOSSDK解决了我的问题。
这是我用来配置管道的任务:
- task: UseDotNet@2
displayName: 'Use .Net Core sdk 2.x'
inputs:
version: 2.x
- bash: |
SYMLINK=6_4_0
MONOPREFIX=/Library/Frameworks/Mono.framework/Versions/$SYMLINK
echo "##vso[task.setvariable variable=DYLD_FALLBACK_LIBRARY_PATH;]$MONOPREFIX/lib:/lib:/usr/lib:$DYLD_LIBRARY_FALLBACK_PATH"
echo "##vso[task.setvariable variable=PKG_CONFIG_PATH;]$MONOPREFIX/lib/pkgconfig:$MONOPREFIX/share/pkgconfig:$PKG_CONFIG_PATH"
echo "##vso[task.setvariable variable=PATH;]$MONOPREFIX/bin:$PATH"
displayName: 'Select Mono Version'
- bash: |
echo "Select Xamarin Version"
/bin/bash -c "sudo $AGENT_HOMEDIRECTORY/scripts/select-xamarin-sdk.sh 6_4_0"
displayName: 'Select Xamarin Version'
- bash: |
echo '##vso[task.setvariable variable=MD_APPLE_SDK_ROOT;]'/Applications/Xcode_11.1.app;sudo xcode-select --switch /Applications/Xcode_11.1.app/Contents/Developer
displayName: 'Select XCode Version'
希望这会有所帮助!
更新
仅供参考,您可以找到Azure Pipelines中每个可用映像中安装的内容以及如何根据MS docs选择工具
Azure Pipelines Image Generation
How can I manually select versions of tools on the Hosted macOS agent?