创建架构时的域异常 - 仅在iOS上

时间:2016-09-07 08:50:52

标签: c# xamarin realm realm-net

这是在第一次调用Realm.GetInstance时发生的。仅在iOS上发生 - 在Android上它运行正常。领域版本是0.77.2。

这是一个包含MvvmCross和ReactiveUI的Xamarin项目,但很可能这并不重要。

Realm.GetInstance的调用发生时间稍晚 - 与Android相似 - 在MvvmCross被引导后至少显示一个屏幕。

错误是:

System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded.
  at (wrapper managed-to-native) System.Reflection.Assembly:GetTypes (System.Reflection.Assembly,bool)
  at System.Reflection.Assembly.GetTypes () [0x00000] in /Users/builder/data/lanes/3539/f37444ae/source/maccore/_build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/src/mono/mcs/class/corlib/System.Reflection/Assembly.cs:402 
  at Realms.RealmSchema.<BuildDefaultSchema>m__3 (System.Reflection.Assembly a) [0x00000] in <filename unknown>:0 
  at System.Linq.Enumerable+<SelectManyIterator>c__Iterator2`2[TSource,TResult].MoveNext () [0x00059] in /Users/builder/data/lanes/3539/f37444ae/source/maccore/_build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/src/mono/external/referencesource/System.Core/System/Linq/Enumerable.cs:423 
  at System.Linq.Enumerable+WhereEnumerableIterator`1[TSource].MoveNext () [0x00062] in /Users/builder/data/lanes/3539/f37444ae/source/maccore/_build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/src/mono/external/referencesource/System.Core/System/Linq/Enumerable.cs:147 
  at Realms.RealmSchema.CreateSchemaForClasses (IEnumerable`1 classes, Realms.SchemaHandle schemaHandle) [0x00025] in <filename unknown>:0 
  at Realms.RealmSchema.BuildDefaultSchema () [0x00071] in <filename unknown>:0 
  at System.Lazy`1[T].CreateValue () [0x00075] in /Users/builder/data/lanes/3539/f37444ae/source/maccore/_build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/src/mono/external/referencesource/mscorlib/system/Lazy.cs:437 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in /Users/builder/data/lanes/3539/f37444ae/source/maccore/_build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/src/mono/external/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:143 
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x00047] in /Users/builder/data/lanes/3539/f37444ae/source/maccore/_build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/src/mono/external/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:187 
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in /Users/builder/data/lanes/3539/f37444ae/source/maccore/_build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/src/mono/external/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:156 
  at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in /Users/builder/data/lanes/3539/f37444ae/source/maccore/_build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/src/mono/external/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:128 
  at System.Runtime.CompilerServices.TaskAwaiter.GetResult () [0x00000] in /Users/builder/data/lanes/3539/f37444ae/source/maccore/_build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/src/mono/external/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:113 

2 个答案:

答案 0 :(得分:1)

由于它是一个反射问题(ReflectionTypeLoadException),我不得不假设'Xamarin.iOS`链接器正在删除一些类。

您可以手动将[Xamarin.iOS.Foundation.Preserve]属性添加到这些类(或成员),以便它们不会被链接出来,因为您可能想要将链接器设置为全部链接或仅链接SDK在您的发布版本中,以减少最终的.ipa大小。

  

您可以对类型的每个成员或类型本身应用此属性。如果要保留整个类型,可以在类型上使用语法[Preserve(AllMembers = true)]。

     

有时您希望保留某些成员,但仅限于保留包含类型的成员。在这些情况下,请使用[保留(条件=真)]

参考:Preserving Code

答案 1 :(得分:1)

我们尝试将[Preserve (AllMembers = true)]属性自动添加到来自RealmObject的类中,因此您不必像@SushiHangover建议的那样手动添加它们。

所以听起来这在Fody编织步骤中并没有发生。那可能是个错误。也许我们构建PreserveAttribute的方式与此版本的IOS中的方式不兼容,因此不会保留

我发现链接Xamarin的命名约定非常直观。如果用尝试剥离未使用代替链接这些单词更有意义,例如:不要尝试剥离未使用

您的RealmObject子类上是否有自己的构造函数?

您能否发布正在使用的IOS和Xamarin Studio版本?

Xamarin版本为4.1.2.18,Xamarin.iOS版本为9.8.2.22。我正在使用VS 2015 Update 3,而不是Xamarin Studio。

我添加了issue 822来跟踪这是Realm中相当高的优先级。