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

.NET 9 MAUI Android移植应用启动异常排查求助

迁移Xamarin Forms到.NET 9 MAUI时Shell导航启动异常问题及解决办法

问题背景

将Xamarin Forms Android应用迁移至.NET 9 MAUI后整体运行良好,迁移难度低于预期。原应用通过设置MainPage加载页面并自行管理页面栈,切换为Shell导航模式时出现启动异常。

原启动配置

原App构造函数(App.xaml.cs)中初始化启动页:

MainPage = new SplashPage();

SplashPage的XAML已绑定对应的SplashPageViewModel:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="CryptoVault.Views.SplashPage"
             xmlns:local="clr-namespace:CryptoVault.ViewModels;assembly=CryptoVaultAndroidApp"
             xmlns:vm="clr-namespace:CryptoVault.ViewModels"
             x:DataType="vm:SplashPageViewModel"
             >

    <ContentPage.BindingContext>
        <local:SplashPageViewModel/>
    </ContentPage.BindingContext>

</ContentPage>

切换Shell导航后的配置

注释掉App构造函数中的MainPage初始化代码,重写CreateWindow方法:

protected override Window CreateWindow(IActivationState? activationState)
{
    return new Window(new AppShell());
}

AppShell.xaml的初始配置:

<ShellContent
    Title="Home"
    ContentTemplate="{DataTemplate local:MauiProgram}"
    Route="SplashPage" />

启动异常详情

启动应用时抛出System.InvalidOperationException,错误信息:

Message=Instances of abstract classes cannot be created.

堆栈跟踪信息:

0xFFFFFFFFFFFFFFFF in Android.Runtime.RuntimeNativeMethods.monodroid_debugger_unhandled_exception   C#
0x1A in Android.Runtime.JNINativeWrapper._unhandled_exception at /Users/runner/work/1/s/Xamarin-android/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.cs:12,5 C#
0x23 in Android.Runtime.JNINativeWrapper.Wrap_JniMarshal_PPLLL_L at /Users/runner/work/1/s/Xamarin-android/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.cs:364,26    C#
0x20 in Microsoft.Extensions.DependencyInjection.ActivatorUtilities.CreateInstance  C#
0x68 in Microsoft.Maui.Controls.ShellContent. at /_/src/Controls/src/Core/Shell/ShellContent.cs:87,7    C#
0x27 in Microsoft.Maui.Controls.ElementTemplate.CreateContent at /_/src/Controls/src/Core/ElementTemplate.cs:87,4   C#
0x8 in Microsoft.Maui.Controls.Internals.DataTemplateExtensions.CreateContent at /_/src/Controls/src/Core/DataTemplateExtensions.cs:23,4    C#
0x71 in Microsoft.Maui.Controls.ShellContent.Microsoft.Maui.Controls.IShellContentController.GetOrCreateContent at /_/src/Controls/src/Core/Shell/ShellContent.cs:91,5  C#
0x16E in Microsoft.Maui.Controls.Platform.Compatibility.ShellSectionRenderer.OnCreateView at /_/src/Controls/src/Core/Compatibility/Handlers/Shell/Android/ShellSectionRenderer.cs:124,5    C#
0x24 in AndroidX.Fragment.App.Fragment.n_OnCreateView_Landroid_view_LayoutInflater_Landroid_view_ViewGroup_Landroid_os_Bundle_ at C:\a\_work\1\s\generated\androidx.fragment.fragment\obj\Release\net8.0-android\generated\src\AndroidX.Fragment.App.Fragment.cs:2045,4 C#
0xD in Android.Runtime.JNINativeWrapper.Wrap_JniMarshal_PPLLL_L at /Users/runner/work/1/s/Xamarin-android/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.cs:363,5  C#

问题解决

修改AppShell.xaml中ShellContent的DataTemplate目标类型,将local:MauiProgram替换为local:SplashPage:

修改前:

<ShellContent
    Title="Home"
    ContentTemplate="{DataTemplate local:MauiProgram}"
    Route="SplashPage" />

修改后:

<ShellContent
    Title="Home"
    ContentTemplate="{DataTemplate local:SplashPage}"
    Route="SplashPage" />

该错误原本就存在于配置中,但仅在通过重写CreateWindow实例化AppShell的导航模式下才会触发。


内容的提问来源于stack exchange,提问作者Blaise

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 13:22:38