Xamarin.Forms版本高于4.7时出现Mono.Linker.MarkException错误求助
解决Xamarin.Forms 4.7以上版本的Mono.Linker.MarkException错误
错误详情
Severity Code Description Project File Line Suppression State Error Mono.Linker.MarkException: Error processing method: 'System.Void xxx.Droid.Resource::UpdateIdValues()' in assembly: 'xxx.Droid.dll' ---> Mono.Cecil.ResolutionException: Failed to resolve System.Int32 Xamarin.Forms.Platform.Android.Resource/String::overflow_tab_title at Mono.Linker.Steps.MarkStep.HandleUnresolvedField(FieldReference reference) at Mono.Linker.Steps.MarkStep.MarkInstruction(Instruction instruction) at Mono.Linker.Steps.MarkStep.MarkMethodBody(MethodBody body) at Mono.Linker.Steps.MarkStep.ProcessMethod(MethodDefinition method) at Mono.Linker.Steps.MarkStep.ProcessQueue() --- End of inner exception stack trace --- at Mono.Linker.Steps.MarkStep.ProcessQueue() at Mono.Linker.Steps.MarkStep.ProcessPrimaryQueue() at Mono.Linker.Steps.MarkStep.Process() at Mono.Linker.Steps.MarkStep.Process(LinkContext context) at MonoDroid.Tuner.MonoDroidMarkStep.Process(LinkContext context) at Mono.Linker.Pipeline.ProcessStep(LinkContext context, IStep step) at Mono.Linker.Pipeline.Process(LinkContext context) at MonoDroid.Tuner.Linker.Process(LinkerOptions options, ILogger logger, LinkContext& context) at Xamarin.Android.Tasks.LinkAssemblies.Execute(DirectoryAssemblyResolver res) at Xamarin.Android.Tasks.LinkAssemblies.RunTask() at Microsoft.Android.Build.Tasks.AndroidTask.Execute() in /Users/runner/work/1/s/xamarin-android/external/xamarin-android-tools/src/Microsoft.Android.Build.BaseTasks/AndroidTask.cs:line 17 xxx.Droid
已尝试方案:
- 移除
Xamarin.Android.Support.v7.MediaRouter - 清理项目→关闭VS→删除bin/obj文件夹→重启VS→重新生成
解决思路
1. 调整链接器行为
该错误是链接器优化时找不到目标资源字段,可通过修改链接器规则解决:
- 右键Android项目→属性→Android选项→链接器行为,先选择**"不链接"测试是否解决问题,确认后可尝试"SDK程序集仅"**平衡包体积
- 若需保留完整链接优化,在项目中添加
Linker.xml文件,写入以下规则:<linker> <assembly fullname="Xamarin.Forms.Platform.Android"> <type fullname="Xamarin.Forms.Platform.Android.Resource" preserve="all"/> <type fullname="Xamarin.Forms.Platform.Android.Resource.String" preserve="all"/> </assembly> </linker>
2. 统一Xamarin.Forms及依赖版本
Xamarin.Forms 4.8+全面转向AndroidX,旧Support库会引发版本冲突:
- 打开NuGet包管理器,将所有Xamarin.Forms相关包(含
Xamarin.Forms.Platform.Android)更新至同一最新版本 - 检查并更新所有
Xamarin.AndroidX系列包,确保版本完全一致
3. 修复资源生成异常
自动生成的Resource类可能出现异常,可手动干预:
- 右键Android项目→生成→重新生成资源文件(或执行命令
MSBuild /t:GenerateResources) - 检查
Resources/values/strings.xml,若缺少overflow_tab_title,手动添加:<string name="overflow_tab_title">更多</string>
4. 排查引用与命名空间冲突
- 清理Android项目中残留的旧版Xamarin.Forms或Support库引用
- 检查是否存在自定义
Resource类或命名空间,避免与Xamarin.Forms.Platform.Android.Resource冲突
内容的提问来源于stack exchange,提问作者Yohanes AI
相关产品推荐
相关产品推荐

