MvvmCross MvxException"在RELEASE配置下无法构造和初始化ViewModel"

Ale*_*akh 6 android release xamarin.android mvvmcross xamarin

我正在使用MvvmCross开发Xamarin.Android应用程序.每次我在RELEASE配置下启动应用程序时,它会在启动时崩溃并出现以下错误:

Cirrious.CrossCore.Exceptions.MvxException:无法从定位器MvxDefaultViewModelLocator构造和初始化类型DroidApp.Core.ViewModels.MainViewModel的ViewModel - 检查MvxTrace以获取更多信息

这个应用程序在DEBUG配置下工作得非常好.在我更新代码以使用MvvmCross 3.1之后,问题开始出现

堆栈跟踪的完整输出如下:

03-16 03:53:04.110 I/MonoDroid(593):UNHANDLED EXCEPTION:Cirrious.CrossCore.Exceptions.MvxException:无法从定位器MvxDefaultViewModelLocator构造和初始化类型为Pcl.Core.ViewModels.MainViewModel的ViewModel - 检查MvxTrace以获取更多信息03-16 03:53:04.110 I/MonoDroid(593):在Cirrious.MvvmCross.ViewModels.MvxViewModelLoader.LoadViewModel(Cirrious.MvvmCross.ViewModels.MvxViewModelRequest,Cirrious.MvvmCross.ViewModels.IMvxBundle,Cirrious.MvvmCross.ViewModels.IMvxViewModelLocator) 03-16 03:53:04.110 I/MonoDroid(593):在Cirrious.MvvmCross.ViewModels.MvxViewModelLoader.LoadViewModel(Cirrious.MvvmCross.ViewModels.MvxViewModelRequest,Cirrious.MvvmCross.ViewModels.IMvxBundle)03-16 03:53:04.110 I/MonoDroid(593):在Cirrious.MvvmCross.Droid.Views.MvxAndroidViewsContainer.ViewModelFromRequest(Cirrious.MvvmCross.ViewModels.MvxViewModelRequest,Cirrious.MvvmCross.ViewModels.IMvxBundle)03-16 03:53:04.110 I/MonoDroid(593) :在Cirrious.MvvmCross.Droid.Views.Mvx AndroidViewsContainer.CreateViewModelFromIntent(Android.Content.Intent,Cirrious.MvvmCross.ViewModels.IMvxBundle)03-16 03:53:04.110 I/MonoDroid(593):在Cirrious.MvvmCross.Droid.Views.MvxAndroidViewsContainer.Load(Android.Content. Intent,Cirrious.MvvmCross.ViewModels.IMvxBundle,System.Type)03-16 03:53:04.110 I/MonoDroid(593):在Cirrious.MvvmCross.Droid.Views.MvxActivityViewExtensions.LoadViewModel(Cirrious.MvvmCross.Droid.Views. IMvxAndroidView,Cirrious.MvvmCross.ViewModels.IMvxBundle)03-16 03:53:04.110 I/MonoDroid(593):在Cirrious.MvvmCross.Droid.Views.MvxActivityViewExtensions/<> c_ DisplayClass3.b _1()03-16 03: 53:04.110 I/MonoDroid(593):在Cirrious.MvvmCross.Views.MvxViewExtensionMethods.OnViewCreate(Cirrious.MvvmCross.Views.IMvxView,System.Func 1<Cirrious.MvvmCross.ViewModels.IMvxViewModel>) <IL 0x00013, 0x00113> 03-16 03:53:04.110 I/MonoDroid( 593): at Cirrious.MvvmCross.Droid.Views.MvxActivityViewExtensions.OnViewCreate (Cirrious.MvvmCross.Droid.Views.IMvxAndroidView,Android.OS.Bundle) <IL 0x00073, 0x0031f> 03-16 03:53:04.110 I/MonoDroid( 593): at Cirrious.MvvmCross.Droid.Views.MvxActivityAdapter.EventSourceOnCreateCalled (object,Cirrious.CrossCore.Core.MvxValueEventArgs1)03-16 03:53:04.110 I/MonoDroid(593):at (wrapper delegate-invoke)System.EventHandler 1<Cirrious.CrossCore.Core.MvxValueEventArgs1> .invoke_void_ this __object_TEventArgs(object,Cirrious.CrossCore.Core.MvxValueEventArgs 1<Android.OS.Bundle>) <0x00067> 03-16 03:53:04.110 I/MonoDroid( 593): at Cirrious.CrossCore.Core.MvxDelegateExtensionMethods.Raise<Android.OS.Bundle> (System.EventHandler1>,object,Android.OS.Bundle)<0x000c3> 03-16 03:53:04.110 I/MonoDroid(593):在Cirrious.CrossCore.Droid.Views.MvxEventSourceActivity.OnCreate(Android.OS.Bundle)03-16 03:53:04.110 I/MonoDroid(593):at MyApp.Droid.Common .MvxActivityBase.OnCreate(Android.OS.Bundle)03-16 03:53:04.110 I/MonoDroid(593):at MyApp.Droid.Views.MainView.OnCreate(Android.OS.Bundle)03-16 03:53: 04.110 I/MonoDroid(593):at Android.App.Activity.n_OnCreate_Landroid_os_Bundle_(intptr,intptr,intptr)03-16 03:53:04.110 I/MonoDroid(593):at(wrapper dynamic-method)object.e62191de-ee25 -45fe-b902-796a741820a1(intptr,intptr,intptr)未处理的异常:

Cirrious.CrossCore.Exceptions.MvxException:无法从定位器MvxDefaultViewModelLocator构造和初始化类型为Pcl.Core.ViewModels.MainViewModel的ViewModel - 有关更多信息,请查看MvxTrace 03-16 03:53:07.080 E/mono-rt(593):[错误]致命未处理例外:Cirrious.CrossCore.Exceptions.MvxException:无法从定位器MvxDefaultViewModelLocator构造和初始化类型为Pcl.Core.ViewModels.MainViewModel的ViewModel - 有关详细信息,请查看MvxTrace 03-16 03:53:07.080 E/mono- rt(593):在Cirrious.MvvmCross.ViewModels.MvxViewModelLoader.LoadViewModel(Cirrious.MvvmCross.ViewModels.MvxViewModelRequest请求,IMvxBundle savedState,IMvxViewModelLocator viewModelLocator)[0x00000] in:0 03-16 03:53:07.080 E/mono-rt (593):在Cirrious.MvvmCross.ViewModels.MvxViewModelLoader.LoadViewModel(Cirrious.MvvmCross.ViewModels.MvxViewModelRequest请求,IMvxBundle savedState)[0x00000] in:0 03-16 03:53:07.080 E/mono-rt(593):在Cirrious.MvvmCross.Droid.Views.MvxAndroidViewsContainer.ViewModelFromRequest(Cirrious.MvvmCross.ViewModels.MvxViewModelRequest viewModelRequest,IMvxBundle savedState)[0x00000] in:0 03-16 03:53:07.080 E/mono-rt(593):at Cirrious.MvvmCross.Droid.Views. MvxAndroidViewsContainer.CreateViewModelFromIntent(Android.Content.Intent intent,IMvxBundle savedState)[0x00000]程序'Mono'已退出,代码为0(0x0).

Stu*_*art 6

根据提供的信息,我不知道是什么导致了这个问题.

您列出的例外情况将在https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross/ViewModels/MvxViewModelLoader.cs#L46上引发

这只能在MvxDefaultViewModelLocator返回时发生false.

MvxDefaultViewModelLocator返回false它总是记录一条消息解释为什么-见 https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross/ViewModels/MvxDefaultViewModelLocator.cs#L31

要调试它我会:

  • 尝试查看跟踪或日志输出 - 包括将此输出路由到在发布模式下工作的内容.
  • 尝试在您的base.OnCreate()调用周围添加一个异常处理程序MainView,看看它是否解释了问题.
  • 尝试在MainViewModel构造函数中添加一些跟踪和/或断点- 它是否被调用?
  • 尝试在这里搜索仅在Xamarin和/或MvvmCross中发布的其他问题