MvvmCross 6.0.1启动时OnCreate()出现ArgumentNullException求助
ArgumentNullException in MvxFormsAndroidSetup.FormsApplication with MvvmCross 6.0.1 (Xamarin.Forms Android)
从你提供的异常栈和代码来看,这个问题核心是MvvmCross在初始化时找不到你的Xamarin.Forms应用实例,导致调用FirstOrDefault()时数据源为null,触发了ArgumentNullException。下面是我整理的几个针对性解决方案和排查点:
解决方案
1. 确保Forms应用实例被正确注册
在你的Core/Forms共享项目的Setup类中,必须重写CreateFormsApplication()方法并返回有效的Forms应用实例——这是MvvmCross获取Forms应用的关键入口,返回null直接会引发这个异常:
public class AppSetup : MvxFormsSetup<App> { protected override Xamarin.Forms.Application CreateFormsApplication() { // 这里一定要返回你的实际Forms App实例,不能为null return new App(); } // 其他必要的Setup重写逻辑(比如注册服务等)... }
2. 检查Android端初始化流程
不管是MainActivity还是设置为MainLauncher的SplashScreen,都要确保MvvmCross的Setup流程完整执行:
- 如果你继承的是
MvxFormsAppCompatActivity,可以确认base.OnCreate(bundle)已经触发了Setup初始化; - 若手动管理初始化,要在启动类中显式完成Setup的初始化:
protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); // 手动初始化Setup(仅在自动初始化失效时使用) var setup = new AppSetup(this, this); setup.Initialize(); }
如果用SplashScreen作为启动页,不要跳过Setup直接跳转,必须先完成MvvmCross的初始化再进入主页面。
3. 统一MvvmCross相关NuGet包版本
确保所有MvvmCross系列的NuGet包(MvvmCross、MvvmCross.Forms、MvvmCross.Droid.Support.V7.AppCompat等)版本完全一致,都是6.0.1。版本不一致是这类初始化异常的常见诱因。
4. 清理重建项目
有时候编译缓存会导致奇怪的初始化问题,尝试以下步骤:
- 右键解决方案选择「清理解决方案」
- 删除所有项目下的
bin和obj文件夹 - 重新生成整个解决方案
额外排查点
如果上述方法无效,可以进一步检查:
- Core项目的
App类构造函数是否有未处理的异常,导致实例无法正常创建; - 是否在Setup类中重写了
GetViewAssemblies()等扫描方法,不小心排除了Forms应用所在的程序集。
内容的提问来源于stack exchange,提问作者core
相关产品推荐
相关产品推荐

