Zaid-Ajaj / LiteDB.FSharp

Advanced F# Support for LiteDB, an embedded NoSql database for .NET with type-safe query expression through F# quotations
MIT License
180 stars 22 forks source link

Mono linker could not resolve a proper method #32

Closed vshapenko closed 5 years ago

vshapenko commented 5 years ago

Hello! I am trying to use your library for my fabulous project, and i am getting following error: Mono.Linker.MarkException: Error processing method: 'LiteDB.LiteRepository LiteDB.FSharp.Extensions/LiteRepository::insertItem(a,LiteDB.LiteRepository)' in assembly: 'LiteDB.FSharp.dll' ---> Mono.Cecil.ResolutionException: Failed to resolve System.Void LiteDB.LiteRepository::Insert(!!0,System.String) в Mono.Linker.Steps.MarkStep.HandleUnresolvedMethod(MethodReference reference) в Mono.Linker.Steps.MarkStep.MarkMethod(MethodReference reference) в Mono.Linker.Steps.MarkStep.MarkInstruction(Instruction instruction) в Mono.Linker.Steps.MarkStep.MarkMethodBody(MethodBody body) в Mono.Linker.Steps.MarkStep.ProcessMethod(MethodDefinition method) в Mono.Linker.Steps.MarkStep.ProcessQueue() --- Конец трассировки внутреннего стека исключений --- в Mono.Linker.Steps.MarkStep.ProcessQueue() в Mono.Linker.Steps.MarkStep.ProcessPrimaryQueue() в Mono.Linker.Steps.MarkStep.Process() в MonoDroid.Tuner.MonoDroidMarkStep.Process(LinkContext context) в Mono.Linker.Pipeline.Process(LinkContext context) в MonoDroid.Tuner.Linker.Process(LinkerOptions options, ILogger logger, LinkContext& context) в Xamarin.Android.Tasks.LinkAssemblies.Execute(DirectoryAssemblyResolver res) в Xamarin.Android.Tasks.LinkAssemblies.Execute() в Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() в Microsoft.Build.BackEnd.TaskBuilder.d__26.MoveNext()

Looks like mono linker needs more type annotation to determine which method to use

humhei commented 5 years ago
LiteRepository::insertItem(a,LiteDB.LiteRepository)

Hello. What is the type definition of a? LiteRepository.insertItem is a single wrapper to LiteRepository.Insert

        let insertItem<'a> (item: 'a) (lr:LiteRepository) =
            lr.Insert<'a>(item)
            lr

Can you try LiteRepository.Insert(your record) to see what happened?

Also try LiteCollection.Insert

Thanks

vshapenko commented 5 years ago

Hello, this issue should be closed. My bad