【问题标题】:Xamarin project failing to find SkiaSharp in Android or WindowsXamarin 项目无法在 Android 或 Windows 中找到 SkiaSharp
【发布时间】:2017-01-30 20:37:11
【问题描述】:

我承认我是 Xamarin 和跨平台开发的新手,如果这似乎是一个微不足道的问题,我深表歉意,但我已经尝试了好几个晚上了。

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

它在所有三个平台上都运行,但我必须删除 Xamarin 包并将其重新添加到项目中,我无法让 SkiaSharp 在 Windows 或 Android 中正常运行。我得到一个 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(便携式)- PCL 包含核心 Xamarin.Forms 应用程序、带有 StackLayout 的 MainPage,其中包含带有 MyView 的 Frame,以及包含带有 SKCanvasView 的 Grid 的 MyView。
  • MyProj.Windows (Windows 8.1) - 包装器 - 仅包含一个空应用程序和一个加载 MyProj.XMForms 应用程序的 MainPage。
  • MyProj.UWP(通用 Windows)- 包装器 - 仅包含一个空应用程序和一个加载 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 包。

我错过了什么?

谢谢,

伊恩

【问题讨论】:

    标签: xamarin skiasharp


    【解决方案1】:

    如果你查看异常消息,有这一行:

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

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

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

    【讨论】:

    • 谢谢。确认该依赖项列表很有用。不幸的是,这不是我的答案——我已经进行了三次检查,然后我从 SkiaSharp FormsSample 中对 Android 项目进行了交叉检查——我肯定已经拥有完全相同的一组 Nuget。
    • 有助于了解 Windows 8 限制 - 我想知道为什么 Xamarin Forms 支持它时没有示例。对我来说真的很学术,因为我打算在普通 Windows 计算机上使用本机 Windows 表单,但这让我很烦......
    【解决方案2】:

    好的,通过从 SkiaSharp FormsSample 获取 Android 项目并将调用替换为

    ,我已经设法让 Android 工作了

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-28
      • 2018-08-14
      相关资源
      最近更新 更多