2016-09-07 59 views
0

這發生在第一次調用Realm.GetInstance時。只發生在iOS上 - 而在Android上它工作正常。領域版本是0.77.2。架構創建時的領域異常 - 僅在iOS上

這是一個使用MvvmCross和ReactiveUI的Xamarin項目,但很可能這並不重要。

在啓動MvvmCross並顯示至少一個屏幕後,致電Realm.GetInstance發生的時間稍晚 - 與Android類似 - 。

的錯誤是:

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 
+1

什麼是在該iOS版本上設置的「鏈接器行爲」? – SushiHangover

+0

是的,它是'不要鏈接'。什麼是推薦的選擇?僅鏈接所有程序集或SDK程序集? –

+0

我想也許它是鏈接出一些你的類,因爲它是一個'ReflectionTypeLoadException' ...它不是來自Xamarin的iOS10 Beta Cycle8嗎? – SushiHangover

回答

1

既然是反映問題(ReflectionTypeLoadException),我將不得不承擔「Xamarin.iOS`接頭移除一些類。

您可以手動添加[Xamarin.iOS.Foundation.Preserve]屬性的類(或構件),所以你會可能要設置鏈接器鏈接全部或僅鏈接SDK的發佈版本,以減少最終他們都沒有聯繫了.ipa大小。

您可以將此屬性應用於類型的每個成員或類型本身。如果要保留整個類型,則可以在該類型上使用語法[Preserve(AllMembers = true)]。

有時候你想保留某些成員,但只有當包含的類型被保留。在這種情況下,使用[保留(條件=真)]

編號:Preserving Code

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中的相當高的優先級。

+0

是的,自動添加屬性會更好。我有一個默認的構造函數在發生問題的特定'RealmObject'上。 Xamarin版本是4.1.2.18,Xamarin.iOS版本是9.8.2.22。我正在使用VS 2015 Update 3,而不是Xamarin Studio。 –