启用链接时TypeInitializationException

时间:2017-10-27 15:43:34

标签: xamarin xamarin.ios ef-core-2.0

我有一个使用EF Core 2.0的Xamarin IOS应用程序。 只要我在调试模式下没有SDK链接,一切正常。但是当我激活SDK Framework Linking时(在调试或发布模式下),当我调用这段代码时,我得到以下异常:

var contacts = DbContext.Contacts
                                .Include(x => x.Events)
                                .Include(x => x.Addresses)
                                .Include(x => x.Infos)
                                .ToList();

例外:

{System.TypeInitializationException: The type initializer for 'Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions' threw an exception. ---> System.InvalidOperationException: Sequence contains no matching element
  at System.Linq.Enumerable.Single[TSource] (System.Collections.Generic.IEnumerable`1[T] source, System.Func`2[T,TResult] predicate) [0x00070] in <773264786149499a986a13db6a7d46fe>:0 
  at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.GetMethod (System.String name, System.Int32 parameterCount, System.Func`2[T,TResult] predicate) [0x00029] in <0998bf911f014e7884d2695c95a67016>:0 
  at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions..cctor () [0x00000] in <0998bf911f014e7884d2695c95a67016>:0 
   --- End of inner exception stack trace ---
  at ConnectContacts.DataAccess.Repositories.ContactRepository.DeleteAll () [0x00001] in /Users/npadrutt/Documents/GitHub/ConnectContacts/ConnectContacts/ConnectContacts.DataAccess/Repositories/ContactRepository.cs:43 
  at ConnectContacts.Service.DataServices.ContactDataService+<DeleteAllContacts>d__12.MoveNext () [0x0000f] in /Users/npadrutt/Documents/GitHub/ConnectContacts/ConnectContacts/ConnectContacts.Service/DataServices/ContactDataService.cs:225 
--- End of stack trace from previous location where exception was thrown ---
  at ConnectContacts.DataAccess.Repositories.ContactRepository.DeleteAll () [0x00001] in /Users/npadrutt/Documents/GitHub/ConnectContacts/ConnectContacts/ConnectContacts.DataAccess/Repositories/ContactRepository.cs:43 
  at ConnectContacts.Service.DataServices.ContactDataService+<DeleteAllContacts>d__12.MoveNext () [0x0000f] in /Users/npadrutt/Documents/GitHub/ConnectContacts/ConnectContacts/ConnectContacts.Service/DataServices/ContactDataService.cs:225 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.2.0.11/src/mono/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:151 
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x00037] in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.2.0.11/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:187 
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.2.0.11/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:156 
  at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.2.0.11/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:128 
  at System.Runtime.CompilerServices.TaskAwaiter.GetResult () [0x00000] in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.2.0.11/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:113 
  at ConnectContacts.Business.ViewModels.Wizard.SelectMeContactViewModel+<ImportContacts>d__28.MoveNext () [0x0005d] in /Users/npadrutt/Documents/GitHub/ConnectContacts/ConnectContacts/ConnectContacts.Business/ViewModels/Wizard/SelectMeContactViewModel.cs:129 }

由于例外仅在链接处于活动状态时发生,我认为这里存在一个问题,即某些事情应该被删除。 我已经尝试了&#34; - linkskip =&#34;从链接中排除EntityFrameworkCore包的参数,但到目前为止还没有。

有什么建议吗?

1 个答案:

答案 0 :(得分:4)

对于比列出20 --linkskip个参数更清晰的东西,您可以创建一个LinkDescription.xml文件。将此xml添加到您的iOS项目,然后将--xml=${ProjectDir}/LinkDescription.xml添加到您的mtouch参数:

<?xml version="1.0" encoding="utf-8" ?>
<linker>
    <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>

来源: