每次我尝试构建我的Android项目时,我都会遇到这个链接器错误,链接器设置为SDK only。
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)
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 Xamarin.Android.Tasks.AndroidTask.Execute() TraceIt.Android
字符串
构建设置:
1条答案
按热度按时间y0u0uwnf1#
首先确保只针对Arm 64,因为这是Google Play现在支持的默认架构。
其次,确保切换到dx编译器而不是d8。我知道Google建议切换到d8/r8编译器实现,但从经验来看,它仍然不稳定,并且已经剥离了我以前参与的项目所依赖的大量API。(例如Square SDK)。
第三,看起来你的Android客户端引用的源代码与Android运行时不兼容。尝试使用接口隔离的SOLID原则隐藏实现(通过接口和依赖注入隐藏类的实现,让另一个库来管理实现)。如果您可以通过抽象它来防止客户端引用直接导致您的问题的实现,那么链接器应该为您工作。
第四,始终确保链接源代码,以最大限度地减少apk的大小。它还可以加快开发速度,并确保启用共享MonoRuntime。它支持Android 6及以上。