Xamarin Android归档失败:Xamarin.iOS.dll引发LinkAssemblies任务错误
解决Xamarin.iOS打包Google Play时LinkAssemblies任务失败的问题
嘿,我之前在Xamarin.iOS项目打包上传Google Play的时候,也碰到过一模一样的LinkAssemblies报错,折腾了好一阵才解决。针对你遇到的这个Mono.Linker.MarkException——处理Xamarin.iOS.dll里的System.Void ObjCRuntime.Runtime::set_UseAutoreleasePoolInThreadPool(System.Boolean)方法出错的问题,给你几个亲测有效的排查和解决步骤:
先检查Xamarin.iOS版本兼容性
这个UseAutoreleasePoolInThreadPool是Xamarin.iOS较新版本引入的API,如果你的本地SDK版本和项目引用的版本不匹配,很容易触发链接器的标记错误。建议:- 打开Visual Studio的
Tools > Options > Xamarin > iOS Settings查看本地SDK版本; - 右键项目进入
Properties > iOS Application,确认项目的目标SDK版本和本地SDK一致,要么升级到最新稳定版,要么回退到之前成功打包的版本(如果不想大动的话)。
- 打开Visual Studio的
调整链接器行为,避免误删关键方法
链接器在做代码优化时,可能误判这个方法没有被引用而把它移除,导致打包报错:- 先临时调整链接器选项:右键项目 >
Properties > iOS Build,把Linker behavior改成Don't link,尝试打包,如果能成功,说明是链接器的问题; - 如果需要保留链接优化,就在项目里新增一个
Linker.xml文件,内容如下:<linker> <assembly fullname="Xamarin.iOS"> <type fullname="ObjCRuntime.Runtime"> <method name="set_UseAutoreleasePoolInThreadPool" /> </type> </assembly> </linker> - 记得把这个
Linker.xml的Build Action设置为LinkDescription(右键文件 > 属性里调整)。
- 先临时调整链接器选项:右键项目 >
彻底清理项目缓存后重建
有时候旧的缓存文件会导致各种奇怪的打包错误,建议:- 删除项目目录下的
bin和obj文件夹; - 清除Xamarin的全局缓存:macOS路径是
~/Library/Caches/Xamarin,Windows是%LOCALAPPDATA%\Xamarin\Cache; - 重新打开项目,先清理解决方案,再尝试归档打包。
- 删除项目目录下的
检查并统一NuGet包版本
项目里的NuGet包如果和Xamarin.iOS版本不兼容,也可能触发链接器问题:- 打开
NuGet Package Manager,查看所有包的版本,尤其是涉及iOS原生绑定的包; - 用
Consolidate功能统一相同包的版本,要么更新到最新兼容版,要么回退到之前成功打包时的版本。
- 打开
确认项目符合Google Play的归档要求
Google Play的最新要求(比如目标SDK版本、最低iOS版本)也可能间接导致打包问题,确认你的项目:Target Framework和Minimum iOS Version符合Google Play的当前要求;- 所有权限、架构设置都和之前成功上传的版本一致。
内容的提问来源于stack exchange,提问作者JeroenM
相关产品推荐
相关产品推荐

