Xamarin项目未能在Android或Windows

时间:2017-01-30 20:37:11

标签: xamarin 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的网格的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 个答案:

答案 0 :(得分:1)

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

  

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

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