我承认我是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 回答
如果您查看异常消息,则会出现以下行:
这意味着您尚未将SkiaSharp NuGets安装到应用程序项目中 . 确保所有应用都安装了
SkiaSharp
,SkiaSharp.Views
和SkiaSharp.Views.Forms
NuGets . 核心项目只需要SkiaSharp
和SkiaSharp.Views.Forms
NuGets .此外,由于Skia的限制,目前不支持Windows 8.x:https://github.com/mono/SkiaSharp/issues/20
好的,我已经设法通过从SkiaSharp FormsSample中获取Android项目并将调用更替为
LoadApplication(new SkiaSharpSample.FormsSample.Platform.App());
同
LoadApplication(new MyPortable.XamarinForms.App());
我的原始项目肯定包含了与此相同的所有NuGets,我还没有确定它们的关键区别,这意味着这个有效,而我的没有,但至少我现在有一个适用于Android和UWP的解决方案 .