这是在第一次调用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
答案 0 :(得分:1)
由于它是一个反射问题(ReflectionTypeLoadException
),我不得不假设'Xamarin.iOS`链接器正在删除一些类。
您可以手动将[Xamarin.iOS.Foundation.Preserve]
属性添加到这些类(或成员),以便它们不会被链接出来,因为您可能想要将链接器设置为全部链接或仅链接SDK在您的发布版本中,以减少最终的.ipa
大小。
您可以对类型的每个成员或类型本身应用此属性。如果要保留整个类型,可以在类型上使用语法[Preserve(AllMembers = true)]。
有时您希望保留某些成员,但仅限于保留包含类型的成员。在这些情况下,请使用[保留(条件=真)]
答案 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中相当高的优先级。