我承认我是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项目,它可以很好地工作。
相关项目结构:
所有项目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软件包。
我错过了什么?
谢谢,
伊恩
答案 0 :(得分:1)
如果您查看异常消息,则会出现以下行:
不应加载引用程序集以供执行。
这意味着您尚未将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
答案 1 :(得分:0)
好的,我已经通过从SkiaSharp FormsSample中获取Android项目并将调用替换为
来设法让Android正常工作 LoadApplication(new SkiaSharpSample.FormsSample.Platform.App());
与
LoadApplication(new MyPortable.XamarinForms.App());
我的原始项目肯定包含了与此相同的所有NuGets,我还没有确定它们的关键差异,这意味着这个有效,而我的没有,但至少我现在有一个解决方案适用于Android和UWP。