I had a similar error when implementing EntityFrameworkCore
in the project I am working on. The solution for me was to add a file to my iOS project, and have these contents. Also, I am running Microsoft.EntityFrameworkCore.Sqlite
version 2.0.2 currently with no problems.
<?xml version="1.0" encoding="utf-8" ?>
<linker>
<!-- LinkDescription.xml. File added to iOS project by @cwrea for adaptation to EF Core.
Prevents runtime errors when reflection is used for certain types that are not otherwise referenced
directly in the project, and that would be removed by the Xamarin linker.
These kinds of runtime errors do occur in particular when using Entity Framework Core on iOS. EF Core's
query parser does reference certain .NET methods _only_ via reflection, and it is those reflection-only
instances that we need to guard against by ensuring the linker includes them. For the curious, search
for mentions of "GetRuntimeMethod" at https://github.com/aspnet/EntityFramework. Use of EF Core more
advanced than this sample may require additional types/methods added to those below.
Include the following in the project build settings under "Additional mtouch arguments":
[hyphen][hyphen]xml=${ProjectDir}/LinkDescription.xml
There is supposed to be a "LinkDescription" build action for this linker config file so the step above
shouldn't be necessary, but at time of writing Visual Studio 2017 for PC doesn't show that build action
in iOS projects, even though it is an option within iOS projects on Visual Studio 2017 for Mac.
-->
<assembly fullname="mscorlib">
<type fullname="System.String">
<method name="Compare"></method>
<method name="CompareTo"></method>
<method name="ToUpper"></method>
<method name="ToLower"></method>
</type>
</assembly>
<assembly fullname="System.Core">
<type fullname="System.Linq.Expressions.Expression`1"></type>
<type fullname="System.Linq.Queryable"></type>
</assembly>
</linker>
You will also need to set that files Build Action
to LinkDescription. Also, you don't need to copy that file to the output directory. It is only used during the build.
In your project settings for the iOS
project, you will need to put --xml=${ProjectDir}/LinkDescription.xml in the Additional mtouch arguments
section in iOS Build
.
Hope this helps!