Xamarin项目未能在Android或Windows中找到SkiaSharp

我承认我是Xamarin和跨平台开发的新手,所以如果这似乎是一个微不足道的问题,请道歉,但我现在一直试图在几个晚上找到它的底部 .

我有一个基本的Xamarin Forms应用程序,它运行在Windows 8.1,Windows UWP和Android中 . 它使用SkiaSharp作为一些基本图形(基于Skia示例) .

它在所有三个平台上运行,但我不得不删除并重新添加Xamarin包到项目中,我无法让Windows或Android中的SkiaSharp正常运行 . 我得到一个BadImageFormatException:

Additional information: Could not load file or assembly 'SkiaSharp, Version=1.56.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756' or one of its dependencies. Reference assemblies should not be loaded for execution. They can only be loaded in the Reflection-only loader context. (Exception from HRESULT: 0x80131058)

我在Windows 8.1版本和Android版本的x86,x64和Any CPU配置中遇到此异常 .

如果我运行UWP项目,它的工作完美 .

相关项目结构:

  • MyProj.XMForms(Portable) - 包含核心Xamarin.Forms应用程序的PCL,包含带有MyView的Frame的StackLayout的MainPage,以及包含带有SKCanvasView的Grid的MyView .

  • MyProj.Windows(Windows 8.1) - 包装器 - 只包含一个空的App和一个加载MyProj.XMForms应用程序的MainPage .

  • MyProj.UWP(通用Windows) - 包装器 - 只包含一个空的App和一个加载MyProj.XMForms应用程序的MainPage .

  • MyProj.Droid(Android) - 包装器 - 只包含一个加载MyProj.XMForms应用程序的MainActivity .

所有项目NuGet包都有Xamarin.Forms 2.3.3.180,SkiaSharp 1.56.0和SkiaSharp.Views.Forms 1.56.0 . MyProj.Droid也有SkiaSharp.Views(没有其他人会接受它) .

我发现https://github.com/mono/SkiaSharp/issues/190并将 <ShouldIncludeNativeSkiaSharp>true</ShouldIncludeNativeSkiaSharp> 添加到csproj而没有任何区别 .

我尝试删除并重新添加SkiSharp NuGet包 .

我错过了什么?

谢谢,

伊恩

回答(2)

2 years ago

如果您查看异常消息,则会出现以下行:

不应加载引用程序集以执行 .

这意味着您尚未将SkiaSharp NuGets安装到应用程序项目中 . 确保所有应用都安装了 SkiaSharpSkiaSharp.ViewsSkiaSharp.Views.Forms NuGets . 核心项目只需要 SkiaSharpSkiaSharp.Views.Forms NuGets .

此外,由于Skia的限制,目前不支持Windows 8.x:https://github.com/mono/SkiaSharp/issues/20

2 years ago

好的,我已经设法通过从SkiaSharp FormsSample中获取Android项目并将调用更替为

LoadApplication(new SkiaSharpSample.FormsSample.Platform.App());

LoadApplication(new MyPortable.XamarinForms.App());

我的原始项目肯定包含了与此相同的所有NuGets,我还没有确定它们的关键区别,这意味着这个有效,而我的没有,但至少我现在有一个适用于Android和UWP的解决方案 .