Область Xamarin — ошибка при getInstance()

#c# #android #xamarin #realm

#c# #Android #xamarin #область

Вопрос:

Я настроил свою главную страницу таким образом:

 namespace MyNamepage
{
public partial class MyPage: ContentPage
  {
    private Realm realm;
    public MyPage()
    {
        InitializeComponent();
        this.realm = Realm.GetInstance();
    }
  }
}
 

При отладке проекта Android я получил эту ошибку и сбой приложения:

Система.Отражение.TargetInvocationException: исключение было вызвано целью вызова.

  • Я установил «Realm» в PCL и в проекте Droid, используя NuGet, но, похоже, это не работает.
  • Если я удалю вызов getInstance(), приложение не выйдет из строя;

Трассировка стека:

 10-17 10:36:31.935 I/MonoDroid(31518): UNHANDLED EXCEPTION:
10-17 10:36:31.955 I/MonoDroid(31518): System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.PlatformNotSupportedException: The PCL build of Realm is being linked which probably means you need to use NuGet or otherwise link a platform-specific Realm.dll to your main application.
10-17 10:36:31.955 I/MonoDroid(31518):   at Realms.RealmPCLHelpers.ThrowProxyShouldNeverBeUsed () [0x00000] in <filename unknown>:0
10-17 10:36:31.955 I/MonoDroid(31518):   at Realms.Realm.GetInstance (Realms.RealmConfiguration config) [0x00000] in <filename unknown>:0
10-17 10:36:31.955 I/MonoDroid(31518):   at MyPack.SidePage.MyPage..ctor () [0x00008] in C:UsersUserdocumentsvisual studio 2015ProjectsMyPackMyPackMyPackSidePageMyPage.xaml.cs:14
10-17 10:36:31.955 I/MonoDroid(31518):   at (wrapper managed-to-native) System.Reflection.MonoCMethod:InternalInvoke (System.Reflection.MonoCMethod,object,object[],System.Exceptionamp;)
10-17 10:36:31.955 I/MonoDroid(31518):   at System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters) [0x00002] in /Users/builder/data/lanes/3415/7db2aac3/source/mono/mcs/class/corlib/System.Reflection/MonoMethod.cs:644
10-17 10:36:31.965 I/MonoDroid(31518):   --- End of inner exception stack trace ---
10-17 10:36:31.965 I/MonoDroid(31518):   at System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters) [0x00016] in /Users/builder/data/lanes/3415/7db2aac3/source/mono/mcs/class/corlib/System.Reflection/MonoMethod.cs:650
10-17 10:36:31.965 I/MonoDroid(31518):   at System.RuntimeType.CreateInstanceMono (Boolean nonPublic) [0x000ca] in /Users/builder/data/lanes/3415/7db2aac3/source/mono/mcs/class/corlib/ReferenceSources/RuntimeType.cs:115
10-17 10:36:31.965 I/MonoDroid(31518):   at System.RuntimeType.CreateInstanceSlow (Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, System.Threading.StackCrawlMarkamp; stackMark) [0x0001a] in /Users/builder/data/lanes/3415/7db2aac3/source/mono/mcs/class/corlib/ReferenceSources/RuntimeType.cs:89
10-17 10:36:31.965 I/MonoDroid(31518):   at System.RuntimeType.CreateInstanceDefaultCtor (Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, System.Threading.StackCrawlMarkamp; stackMark) [0x0002a] in /Users/builder/data/lanes/3415/7db2aac3/source/mono/external/referencesource/mscorlib/system/rttype.cs:5599
10-17 10:36:31.965 I/MonoDroid(31518):   at System.Activator.CreateInstance (System.Type type, Boolean nonPublic) [0x00040] in /Users/builder/data/lanes/3415/7db2aac3/source/mono/external/referencesource/mscorlib/system/activator.cs:201
10-17 10:36:31.965 I/MonoDroid(31518):   at System.Activator.CreateInstance (System.Type type) [0x00000] in /Users/builder/data/lanes/3415/7db2aac3/source/mono/external/referencesource/mscorlib/system/activator.cs:134
10-17 10:36:31.965 I/MonoDroid(31518):   at MyPack.MainPage.OnItemSelected (System.Object sender, Xamarin.Forms.SelectedItemChangedEventArgs e) [0x00016] in C:UsersUserdocumentsvisual studio 2015ProjectsMyPackMyPackMyPackMainPage.xaml.cs:24
10-17 10:36:31.965 I/MonoDroid(31518):   at (wrapper delegate-invoke) System.EventHandler`1[Xamarin.Forms.SelectedItemChangedEventArgs]:invoke_void_object_TEventArgs (object,Xamarin.Forms.SelectedItemChangedEventArgs)
10-17 10:36:31.975 I/MonoDroid(31518):   at Xamarin.Forms.ListView.OnSelectedItemChanged (Xamarin.Forms.BindableObject bindable, System.Object oldValue, System.Object newValue) [0x0001c] in <filename unknown>:0
10-17 10:36:31.975 I/MonoDroid(31518):   at Xamarin.Forms.BindableObject.SetValueActual (Xamarin.Forms.BindableProperty property, Xamarin.Forms.BindablePropertyContext context, System.Object value, Boolean currentlyApplying, SetValueFlags attributes, Boolean silent) [0x0010e] in <filename unknown>:0
10-17 10:36:31.975 I/MonoDroid(31518):   at Xamarin.Forms.BindableObject.SetValueCore (Xamarin.Forms.BindableProperty property, System.Object value, SetValueFlags attributes, SetValuePrivateFlags privateAttributes) [0x0014b] in <filename unknown>:0
10-17 10:36:31.975 I/MonoDroid(31518):   at Xamarin.Forms.BindableObject.SetValueCore (Xamarin.Forms.BindableProperty property, System.Object value, SetValueFlags attributes) [0x00000] in <filename unknown>:0
10-17 10:36:31.975 I/MonoDroid(31518):   at Xamarin.Forms.ListView.NotifyRowTapped (Int32 groupIndex, Int32 inGroupIndex, Xamarin.Forms.Cell cell) [0x0004c] in <filename unknown>:0
10-17 10:36:31.975 I/MonoDroid(31518):   at Xamarin.Forms.ListView.NotifyRowTapped (Int32 index, Xamarin.Forms.Cell cell) [0x00023] in <filename unknown>:0
10-17 10:36:31.975 I/MonoDroid(31518):   at Xamarin.Forms.Platform.Android.ListViewAdapter.HandleItemClick (Android.Widget.AdapterView parent, Android.Views.View view, Int32 position, Int64 id) [0x00056] in <filename unknown>:0
10-17 10:36:31.975 I/MonoDroid(31518):   at Xamarin.Forms.Platform.Android.CellAdapter.OnItemClick (Android.Widget.AdapterView parent, Android.Views.View view, Int32 position, Int64 id) [0x0002e] in <filename unknown>:0
10-17 10:36:31.975 I/MonoDroid(31518):   at Android.Widget.AdapterView IOnItemClickListenerInvoker.n_OnItemClick_Landroid_widget_AdapterView_Landroid_view_View_IJ (IntPtr jnienv, IntPtr native__this, IntPtr native_parent, IntPtr native_view, Int32 position, Int64 id) [0x00019] in /Users/builder/data/lanes/3415/7db2aac3/source/monodroid/src/Mono.Android/platforms/android-23/src/generated/Android.Widget.AdapterView.cs:215
10-17 10:36:31.975 I/MonoDroid(31518):   at (wrapper dynamic-method) System.Object:585983a8-79f2-48a3-ac33-5b4c905219f1 (intptr,intptr,intptr,intptr,int,long)
10-17 10:36:31.995 D/Mono    (31518): DllImport searching in: '__Internal' ('(null)').
10-17 10:36:31.995 D/Mono    (31518): Searching for 'java_interop_jnienv_throw'.
10-17 10:36:31.995 D/Mono    (31518): Probing 'java_interop_jnienv_throw'.
10-17 10:36:31.995 D/Mono    (31518): Found as 'java_interop_jnienv_throw'.
An unhandled exception occured.

10-17 10:36:34.115 E/mono    (31518):
10-17 10:36:34.115 E/mono    (31518): Unhandled Exception:
10-17 10:36:34.115 E/mono    (31518): System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.PlatformNotSupportedException: The PCL build of Realm is being linked which probably means you need to use NuGet or otherwise link a platform-specific Realm.dll to your main application.
10-17 10:36:34.115 E/mono    (31518):   at Realms.RealmPCLHelpers.ThrowProxyShouldNeverBeUsed () [0x00000] in <filename unknown>:0
10-17 10:36:34.115 E/mono    (31518):   at Realms.Realm.GetInstance (Realms.RealmConfiguration config) [0x00000] in <filename unknown>:0
10-17 10:36:34.115 E/mono    (31518):   at MyPack.SidePage.MyPage..ctor () [0x00008] in C:UsersUserdocumentsvisual studio 2015ProjectsMyPackMyPackMyPackSidePageMyPage.xaml.cs:14
10-17 10:36:34.115 E/mono    (31518):   at (wrapper managed-to-native) System.Reflection.MonoCMethod:InternalInvoke (System.Reflection.MonoCMethod,object,object[],System.Exceptionamp;)
10-17 10:36:34.115 E/mono    (31518):   at System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters) [0x00002] in /Users/builder/data/lanes/3415/7db2aac3/source/mono/mcs/class/corlib/System.Reflection/MonoMethod.cs:644
10-17 10:36:34.115 E/mono    (31518):   --- End of inner exception stack trace ---
10-17 10:36:34.115 E/mono    (31518):   at (wrapper dynamic-method) System.Object:585983a8-79f2-48a3-ac33-5b4c905219f1 (intptr,intptr,intptr,intptr,int,long)
10-17 10:36:34.115 E/mono    (31518):   at (wrapper native-to-managed) System.Object:585983a8-79f2-48a3-ac33-5b4c905219f1 (intptr,intptr,intptr,intptr,int,long)
10-17 10:36:34.115 E/mono-rt (31518): [ERROR] FATAL UNHANDLED EXCEPTION: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.PlatformNotSupportedException: The PCL build of Realm is being linked which probably means you need to use NuGet or otherwise link a platform-specific Realm.dll to your main application.
10-17 10:36:34.115 E/mono-rt (31518):   at Realms.RealmPCLHelpers.ThrowProxyShouldNeverBeUsed () [0x00000] in <filename unknown>:0
10-17 10:36:34.115 E/mono-rt (31518):   at Realms.Realm.GetInstance (Realms.RealmConfiguration config) [0x00000] in <filename unknown>:0
10-17 10:36:34.115 E/mono-rt (31518):   at MyPack.SidePage.MyPage..ctor () [0x00008] in C:UsersUserdocumentsvisual studio 2015ProjectsMyPackMyPackMyPackSidePageMyPage.xaml.cs:14
10-17 10:36:34.115 E/mono-rt (31518):   at (wrapper managed-to-native) System.Reflection.MonoCMethod:InternalInvoke (System.Reflection.MonoCMethod,object,object[],System.Exceptionamp;)
10-17 10:36:34.115 E/mono-rt (31518):   at System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters) [0x00002] in /Users/builder/data/lanes/3415/7db2aac3/source/mono/mcs/class/corlib/System.Reflection/MonoMethod.cs:644
10-17 10:36:34.115 E/mono-rt (31518):   --- End of inner exception stack trace ---
10-17 10:36:34.115 E/mono-rt (31518):   at (wrapper dynamic-method) System.Object:585983a8-79f2-48a3-ac33-5b4c905219f1 (intptr,intptr,intptr,intptr,int,long)
10-17 10:36:34.115 E/mono-rt (31518):   at (wrapper native-to-managed) System.Object:585983a8-79f2-48a3-ac33-5b4c905219f1 (intptr,intptr,intptr,intptr,int,long)
In mgmain JNI_OnLoad
 

Комментарии:

1. Что такое полная трассировка стека?

2. 10-16 17:27:52.792 D/Mono (10277): Assembly Ref addref Xamarin.Forms.Core[0x66958db8] -> System.Diagnostics.Debug[0x66a5e9c0]: 3 Unhandled Exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.

3. @Cheesebaron есть предложения?

4. В этой трассировке стека должно быть намного больше

5. > 0x20 in Android.Widget.AdapterView.IOnItemClickListenerInvoker.n_OnItemClick_Landroid_widget_AdapterView_Landroid_view_View_IJ at /Users/builder/data/lanes/3415/7db2aac3/source/monodroid/src/Mono.Android/platforms/android-23/src/generated/Android.Widget.AdapterView.cs:215,5 C# и 0x1D in MyProject.MainPage.OnItemSelected at C:Usersmyuserdocumentsvisual studio 2015ProjectsMyProjectMyProjectMyProjectMainPage.xaml.cs:24,17 C# спросите меня, нужны ли вам другие журналы, чтобы помочь мне

Ответ №1:

Как показывает трассировка стека и путь, который вы опубликовали в комментариях. Вы установили версию PCL в проекты, зависящие от платформы. Именно поэтому он выдает PlatformNotSupportedException исключение, которое вы получаете.

Попробуйте переустановить NuGet в проектах, специфичных для вашей платформы. В качестве альтернативы вы можете вручную изменить ссылку, чтобы указать на:

 packagesRealm.0.78.1libMonoAndroid44Realm.dll
 

У вас не должно быть никаких ссылок на переносимую папку в вашем проекте, зависящем от платформы.

Комментарии:

1. 1-й путь, который я добавил, относится к файлу csproj каталога проекта PCL, 2-й относится к файлу csproj каталога проекта Droid. Я попытался переустановить Realm в проекте droid, но он по-прежнему не работает.

2. В файле Android csproj у вас должна быть только ссылка на то, что находится в MonoAndroid44.

Ответ №2:

У меня была аналогичная проблема с использованием Xamarin.Формы 3.4.0.1008975 с областью 4.0.1

Необработанное исключение: система.Исключение TypeInitializationException: инициализатор типа для ‘Realms.SharedRealmHandle’ выдал исключение. произошло

Решение состояло в том, чтобы полностью удалить пакет nuget Realm из всех проектов в решении и переустановить Realm обратно. Также убедитесь, что у вас есть FodyWeaver.xml файл во всех проектах.