使用Visual Studio发布Xamarin.Android应用时遇Mono.Linker报错求助
Xamarin发布时Mono.Linker.MarkException错误(Plugin.CloudFirestore相关)
我用Xamarin和C#开发的应用,在Visual Studio 2019/2022执行发布操作时触发以下错误,但调试模式下(实体手机或Android模拟器)运行完全正常。已尝试更新所有依赖包至最新版本、删除Bin和Obj文件夹,问题仍未解决:
Mono.Linker.MarkException: Error processing method: 'System.Void Plugin.CloudFirestore.FirestoreSettings::.cctor()' in assembly: 'Plugin.CloudFirestore.dll' ---> Mono.Cecil.ResolutionException: Failed to resolve System.Boolean Firebase.Firestore.FirebaseFirestoreSettings::AreTimestampsInSnapshotsEnabled() at Mono.Linker.Steps.MarkStep.HandleUnresolvedMethod(MethodReference reference) at Mono.Linker.Steps.MarkStep.MarkMethod(MethodReference 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()
解决建议
调整链接器行为
发布模式下Xamarin默认启用链接器缩减包体积,可能误删了Plugin.CloudFirestore依赖的Firebase方法:- 打开Android项目属性 → Android选项 → 链接器行为
- 先切换为Sdk程序集仅测试,若仍报错可临时选不链接确认问题根源
- 若需要保留链接优化,创建
Linker.xml文件(设置生成操作为AndroidResource),添加以下内容强制保留相关程序集:
<linker> <assembly fullname="Plugin.CloudFirestore" /> <assembly fullname="Firebase.Firestore" /> </linker>检查依赖版本兼容性
最新版本不一定兼容:- 确认Plugin.CloudFirestore与Xamarin.Firebase.Firestore的版本匹配,部分插件对Firebase版本有特定要求,并非越新越好
- 尝试回退Plugin.CloudFirestore到前一个稳定版本,再同步对应版本的Firebase依赖包
手动补充Firebase引用
检查Android项目是否直接引用了Xamarin.Firebase.FirestoreNuGet包,Plugin.CloudFirestore可能未自动引入该依赖,手动添加并确保版本一致深度清理缓存
除了Bin/Obj,还需清理NuGet缓存:- 打开Visual Studio → 工具 → NuGet包管理器 → 管理解决方案的NuGet包 → 设置 → 清除所有NuGet缓存
- 重启Visual Studio,重新生成解决方案后再尝试发布
内容的提问来源于stack exchange,提问作者Spack09
相关产品推荐
相关产品推荐

