Xamarin发布模式编译报错:Mono.Linker.MarkException求助
解决Xamarin Release构建Mono.Linker报错问题
问题说明
Release模式构建时触发以下报错,Debug模式正常:
Error Mono.Linker.MarkException: Error processing method: 'System.ComponentModel.ICustomTypeDescriptor System.Data.Entity.ModelConfiguration.Utilities.AttributeProvider::GetTypeDescriptor(System.Type)' in assembly: 'EntityFramework.dll' ---> Mono.Cecil.ResolutionException: Failed to resolve System.Void System.ComponentModel.DataAnnotations.AssociatedMetadataTypeTypeDescriptionProvider::.ctor(System.Type) en Mono.Linker.Steps.MarkStep.HandleUnresolvedMethod(MethodReference reference) en Mono.Linker.Steps.MarkStep.MarkMethod(MethodReference reference) en Mono.Linker.Steps.MarkStep.MarkInstruction(Instruction instruction) en Mono.Linker.Steps.MarkStep.MarkMethodBody(MethodBody body) en Mono.Linker.Steps.MarkStep.ProcessMethod(MethodDefinition method) en Mono.Linker.Steps.MarkStep.ProcessQueue() --- Fin del seguimiento de la pila de la excepción interna --- en Mono.Linker.Steps.MarkStep.ProcessQueue() en Mono.Linker.Steps.MarkStep.ProcessPrimaryQueue() en Mono.Linker.Steps.MarkStep.Process() en Mono.Linker.Steps.MarkStep.Process(LinkContext context) en MonoDroid.Tuner.MonoDroidMarkStep.Process(LinkContext context) en Mono.Linker.Pipeline.ProcessStep(LinkContext context, IStep step) en Mono.Linker.Pipeline.Process(LinkContext context) en MonoDroid.Tuner.Linker.Process(LinkerOptions options, ILogger logger, LinkContext& context) en Xamarin.Android.Tasks.LinkAssemblies.Execute(DirectoryAssemblyResolver res) en Xamarin.Android.Tasks.LinkAssemblies.RunTask() en Microsoft.Android.Build.Tasks.AndroidTask.Execute() en /Users/builder/azdo/_work/1/s/xamarin-android/external/xamarin-android-tools/src/Microsoft.Android.Build.BaseTasks/AndroidTask.cs:línea 17 proyecto.Android Compilación
解决方法
1. 调整链接器配置
Release模式下链接器会移除未被显式引用的代码,导致EntityFramework的依赖代码被误删。可通过两种方式处理:
- 临时测试方案:打开Android项目属性,进入
Android Options->Linking,将链接模式改为None,重新构建。若能成功,说明是链接器的问题,再进行精准配置。 - 精准保留代码:创建
linker.xml文件,添加以下内容:
将该文件添加到Android项目中,右键设置其生成操作为<linker> <assembly fullname="EntityFramework"> <type fullname="System.Data.Entity.ModelConfiguration.Utilities.AttributeProvider" preserve="all"/> </assembly> <assembly fullname="System.ComponentModel.DataAnnotations"> <type fullname="System.ComponentModel.DataAnnotations.AssociatedMetadataTypeTypeDescriptionProvider" preserve="all"/> </assembly> </linker>Embedded Resource,再重新构建。
2. 更新相关NuGet包
检查并更新EntityFramework和System.ComponentModel.DataAnnotations到兼容Xamarin的最新稳定版本,旧版本可能存在链接器兼容性问题。
3. 检查依赖版本一致性
确保项目中所有相关NuGet包的版本统一,避免版本冲突导致的链接器解析失败。
内容的提问来源于stack exchange,提问作者Practicas
相关产品推荐
相关产品推荐

