You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:34:41