(已解决)在 .net Maui 中实现 SkiaSharp 时出现 System.NotSupportedException 和 System.Reflection.TargetInitationException

问题描述 投票:0回答:1

您好,我正在 .net 8.0 Maui 上实现 skiasharp,并且不断收到 System.NotSupportedException 和 System.Reflection.TargetInvocationException。我试图理解为什么我不断收到这些错误。我开始了一个新项目。添加了 Nuget 包。将 UseSkiaSharp() 添加到构建器。添加了所需的 using 语句。将命名空间添加到 xaml 文件中。添加了来自 Lottie 的 JSON。运行程序,它崩溃了。

using Microsoft.Extensions.Logging;
using SkiaSharp.Views.Maui.Controls.Hosting;

namespace MauiApp1
{
    public static class MauiProgram
    {
        public static MauiApp CreateMauiApp()
        {
            var builder = MauiApp.CreateBuilder();
            builder
                .UseMauiApp<App>()
                .UseSkiaSharp()
                .ConfigureFonts(fonts =>
                {
                    fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                    fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
                });

#if DEBUG
            builder.Logging.AddDebug();
#endif

            return builder.Build();
        }
    }
}
<?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="MauiApp1.MainPage"
             xmlns:skia="clr-namespace:SkiaSharp.Extended.UI.Controls;assembly=SkiaSharp.Extended.UI">

    <ScrollView>
        <skia:SKLottieView
            Source="Free.json"/>
    </ScrollView>

</ContentPage>
    <ItemGroup>
        <PackageReference Include="Microsoft.Maui.Controls" Version="$(MauiVersion)" />
        <PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="$(MauiVersion)" />
        <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="8.0.0" />
        <PackageReference Include="SkiaSharp.Extended.UI.Maui" Version="3.0.0-preview.7" />
    </ItemGroup>

我遵循了这篇文章的实现:https://www.c-sharpcorner.com/article/lottie-animations-in-net-maui2/

在它不起作用之后,我查看了其他人是如何实现它的,他们按照上面的文章中的方式做了。如果我注释掉下面的行:

<skia:SKLottieView             
    Source="Free.json"/>   

程序将启动(除了 Skia 实现之外的所有内容都是默认的 MAUI)。所以我确信这是由于实施了 Skia。虽然我想知道为什么,如果可能的话如何解决这个问题。

编辑:添加堆栈跟踪。为了获取堆栈跟踪,我需要在初始化页面之前在 MainPage 代码后面放置一个断点。所以不知道有没有用。如果我尝试在没有断点的情况下获取堆栈跟踪,那么我无法导致程序中断并将我锁定在 vs2022 之外,直到我关闭所有内容。以下是以下截图:

在此输入图片描述

在此输入图片描述

在此输入图片描述

如果我正常运行程序,那么我会收到此弹出窗口:

在此输入图片描述

在我获得堆栈跟踪之前程序就关闭了。

xaml maui skiasharp
1个回答
1
投票

我可以重现这个问题。此问题发生在 Windows 上,可能与 [BUG] .net maui SkiaSharp crashe 有关。

SkiaSharp.Extended.UI.Maui
NuGet 依赖于
SkiaSharp.Views.Maui.Controls
NuGet,因此它也会崩溃。好消息是该问题已在最新版本中得到修复。

解决方法是手动安装最新的

SkiaSharp.Views.Maui.Controls
NuGet,它可以工作。

这是我安装的软件包

    <PackageReference Include="SkiaSharp.Extended.UI.Maui" Version="3.0.0-preview.7" />
    <PackageReference Include="SkiaSharp.Views.Maui.Controls" Version="3.0.0-preview.5.4" />

这是代码片段

<skia:SKLottieView  WidthRequest="300" HeightRequest="300" Source="dotnetbot.json" RepeatCount="-1" />

这是结果

enter image description here

如果您有任何疑问,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.