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

时间:2020-10-04 04:57:31

标签: c# android xamarin xamarin.forms xamarin.android

每次尝试构建Android项目时,都会出现此链接器错误,并且链接器仅设置为SDK。

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         

构建设置: settings settings2 settings3 settings4 settings5 settings6 settings7 settings8

1 个答案:

答案 0 :(得分:1)

首先请确保仅定位到Arm64,因为这是Google Play现在支持的默认体系结构。

第二,确保切换到dx编译器而不是d8。我知道Google建议切换到d8 / r8编译器实施,但是从经验来看,它仍然不稳定,并且剥夺了我参与过的以前项目依赖的Apis分配。 (例如Square SDK)。

第三,您的android客户端似乎正在引用与Android运行时不兼容的源代码。尝试使用接口隔离的 SOLID 原理隐藏实现(在该方法中,您可以通过接口和依赖项注入隐藏类的实现,然后让另一个库为您管理实现。如果可以避免客户端通过直接引用直接导致您的问题的实现(通过抽象该实现),则链接器应为您工作。

第四,始终确保链接源代码,以最小化apk的大小。此外,它还可以加快开发速度,并确保启用Shared MonoRuntime。 Android 6及更高版本支持该功能。