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

Xamarin Forms Release模式编译报Mono.Linker.MarkException错误求助

报错核心原因

Release模式下Xamarin会默认启用程序集链接器裁剪冗余代码,该报错的本质是链接器无法解析Microsoft.Net.Http.Headers依赖的Microsoft.Extensions.Primitives程序集中的InplaceStringBuilder类型,通常由Nuget包版本不匹配、链接器过度裁剪两个原因导致。

排查与解决步骤
  • 首先校验Nuget包版本一致性:确保项目中安装的Microsoft.Net.Http.Headers和Microsoft.Extensions.Primitives两个Nuget包的主版本号完全匹配,不要跨大版本搭配使用,版本不兼容是该问题的最高发诱因。
  • 验证链接器裁剪问题:右键Xamarin.Android项目 -> 选择「属性」-> 切换到「Android选项」页签 -> 将Release配置下的「链接器行为」从默认的「仅裁剪SDK程序集」/「裁剪所有程序集」修改为「不裁剪」,重新编译如果不再报错,即可确认是链接器过度裁剪导致的问题。
  • 配置链接器保留指定程序集:确认是链接器问题后,不要长期使用「不裁剪」配置(会导致安装包体积大幅增大),可通过自定义链接器配置文件保留相关程序集不被裁剪:
    1. 在Xamarin.Android项目根目录新建LinkerConfig.xml文件,写入以下内容:
    <linker>
      <assembly fullname="Microsoft.Extensions.Primitives" preserve="all" />
      <assembly fullname="Microsoft.Net.Http.Headers" preserve="all" />
    </linker>
    
    1. 右键LinkerConfig.xml文件 -> 选择「属性」-> 将「生成操作」修改为链接器描述文件。
  • 清理缓存重编译:删除项目根目录下的bin、obj文件夹,清理本地Nuget缓存后重新执行Release编译,即可解决绝大多数场景下的该报错。
  • 兜底方案:如果上述操作后仍报错,可将两个相关Nuget包统一降级到6.0.x的LTS版本,高版本AspNetCore类库在Xamarin平台下存在较多兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:57:03