当架构被创建时,Realm异常——仅在iOS上
本文关键字:异常 仅在 iOS Realm 创建 | 更新日期: 2023-09-27 18:06:04
这在第一次调用Realm.GetInstance
时发生。只在iOS上发生-而在Android上工作得很好。Realm版本是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
由于这是一个反射问题(ReflectionTypeLoadException
),我将不得不假设'Xamarin。iOS的链接器正在移除一些类。
你可以手动添加[Xamarin.iOS.Foundation.Preserve]
属性到这些类(或成员),所以他们不链接出来,因为你将可能想要设置链接器链接所有或链接仅SDK在你的发布版本,以减少最终的.ipa
大小。
可以将此属性应用于类型的每个成员或类型本身。如果你想保留整个类型,你可以在类型上使用[preserve (AllMembers = true)]语法。
有时您希望保留某些成员,但仅在保留包含类型的情况下。在这些情况下,使用[Preserve (Conditional=true)]
Ref: Preserving Code
我们尝试将[Preserve (AllMembers = true)]
属性自动添加到从RealmObject
下降的类中,因此您不应该像@SushiHangover建议的那样手动添加它们。
听起来这并没有发生在Fody编织步骤中。这可能是个bug。也可能是我们构建PreserveAttribute
的方式与这个版本的IOS不兼容,所以没有采取行动保存
我发现Xamarin上链接的命名约定非常违反直觉。如果您将Link替换为尝试剥离未使用的,则名称更有意义,例如:不要尝试剥离未使用的
你有你自己的RealmObject
子类的构造函数吗?
对
你能告诉我使用的IOS和Xamarin Studio的确切版本吗?
Xamarin版本为4.1.2.18,Xamarin。iOS版本为9.8.2.22。我使用的是VS 2015 Update 3,而不是Xamarin Studio。
我添加了822问题来跟踪这个问题,因为它在Realm中具有相当高的优先级。