xamarin 尝试构建Android项目时出现链接器错误

bis0qfac  于 2023-08-01  发布在  Android
关注(0)|答案(1)|浏览(104)

每次我尝试构建我的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

字符串

构建设置:

y0u0uwnf

y0u0uwnf1#

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

相关问题