Признаюсь, я новичок в 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)
Я получаю это исключение в конфигурациях x86, x64 и Any CPU для версии Windows 8.1, а также в версии Android.
Если я запустил проект UWP, он работает отлично.
Соответствующая структура проекта:
- MyProj.XMForms (Portable) - PCL, содержащий основное приложение Xamarin.Forms, MainPage с StackLayout, содержащий фрейм с MyView, и MyView, содержащий сетку с SKCanvasView.
- MyProj.Windows (Windows 8.1) - оболочка - просто содержит пустое приложение и страницу MainPage, которая загружает приложение MyProj.XMForms.
- MyProj.UWP (универсальная Windows) - оболочка - просто содержит пустое приложение и страницу MainPage, которая загружает приложение 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 без каких-либо изменений.
Я попытался удалить и повторно добавить пакеты NuGet SkiSharp.
Что мне не хватает?
Спасибо,
Ян