2017-01-30 2 views
1

Я признаюсь, что я новичок в Xamarin и кросс-платформенной разработке, поэтому извиняюсь, если это кажется тривиальным вопросом, но я пытался разобраться в нем несколько вечеров.Проект Xamarin не находит SkiaSharp в Android или Windows

У меня есть базовое приложение 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)

Я получаю это исключение в x86, x64 и любых конфигураций процессоров для 8.1 версии Windows, так и с Android версии.

Если я запускаю проект UWP, он отлично работает.

Соответствующая структура проекта:

  • MyProj.XMForms (Portable) - PCL, содержащие основные Xamarin.Forms App, MainPage с StackLayout, содержащего раму с MyView и MyView, который содержит сетку с SKCanvasView ,
  • MyProj.Windows (Windows 8.1) - оболочка - просто содержит пустое приложение и главную страницу, которая загружает приложение MyProj.XMForms.
  • MyProj.UWP (Universal Windows) - оболочка - просто содержит пустое приложение и главную страницу, которая загружает приложение MyProj.XMForms.
  • MyProj.Droid (Android) - оболочка - просто содержит MainActivity, загружающую приложение MyProj.XMForms.

Все проекты Пакеты 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.

Что мне не хватает?

Спасибо,

Ian

ответ

0

Если вы посмотрите на сообщение об исключении, есть такая строка:

Эталонные узлы не должны быть загружены для исполнения.

Это означает, что вы не установили SkiaSharp NuGets в проекты приложений. Убедитесь, что у всех приложений установлены SkiaSharp, SkiaSharp.Views и SkiaSharp.Views.Forms NuGets. Для основного проекта нужны только SkiaSharp и SkiaSharp.Views.Forms NuGets.

Кроме того, Windows 8.х в настоящее время не поддерживается из-за ограничений в Skia: https://github.com/mono/SkiaSharp/issues/20

+0

спасибо. Полезно, чтобы список подтвержденных зависимостей был подтвержден. К сожалению, это был не ответ для меня - я уже проверил трижды, а затем перекрестно проверил проект Android из SkiaSharp FormsSample - у меня определенно был тот же набор Nugets. –

+0

Полезно знать о ограничении Windows 8 - я задавался вопросом, почему не было образца для этого, когда Xamarin Forms поддерживал его. Академик для меня действительно, так как я планирую использовать собственные формы Windows для общих компьютеров Windows, но это меня исказило ... –

0

Хорошо, что мне удалось получить Android работает, принимая Android проект от SkiaSharp FormsSample и заменить вызов

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

с

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

Мой первоначальный проект, безусловно, включены все те же NuGets, как этот, и я до сих пор не определены ключевые они разностные белый Это означало, что эта работа работала, а у меня нет, но по крайней мере у меня теперь есть решение, которое работает как на Android, так и на UWP.

Смежные вопросы