Как использовать SQLite в приложении Windows Phone 8.1 Silverlight и WinRT Runtime Component

У меня есть ситуация, когда у меня есть приложение Windows Phone Silverlight 8.1, и я хотел бы использовать компонент среды выполнения Windows в качестве фоновой задачи. В обоих этих проектах я хочу использовать SQLite для доступа к базе данных приложений.

Я нашел похожий вопрос здесь:

Как использовать SQLite в Windows (Phone) 8.1's BackgroundTask

Это почти охватывает ситуацию, но не совсем. Любые идеи о том, как добиться того, что я прошу?

Я могу получить очень "близко", последнее сообщение об ошибке, которое я получаю на этапе компиляции, выглядит следующим образом:

Payload contains two or more files with the same destination path 'sqlite3.pdb'. Source files: C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v8.0\ExtensionSDKs\SQLite.WP80\3.8.11.1\Redist\Debug\ARM\sqlite3.pdb C:\Program Files (x86)\Microsoft SDKs\WindowsPhoneApp\v8.1\ExtensionSDKs\SQLite.WP81\3.8.11.1\Redist\Debug\ARM\sqlite3.pdb

Я видел, что решение других ошибок этого типа состоит в том, чтобы просто установить Copy Local на false для одной из ссылок, но я не вижу, как это было бы возможно в этом случае, поскольку на самом деле требуются обе.

Заранее спасибо!

ОБНОВЛЕНИЕ 1: Используя предложение от scottisafool ​​ниже, я удалил файл pdb из папки SQLite SDK, и это немного продвинуло меня, то есть, по крайней мере, теперь он компилируется. Однако потом я сталкиваюсь с другой проблемой...

Затем я начинаю заглушать код для доступа к базе данных в фоновой задаче, и после того, как я перепрыгнул через несколько циклов с "недопустимым типом WinRT", я нахожусь в точке, где все это компилируется и похоже, что оно должно работать. Однако, когда я пытаюсь запустить приложение и запустить код, который раньше работал нормально, то есть создать базу данных при первой загрузке приложения, я сталкиваюсь с этой ошибкой:

The specified module could not be found. (Exception from HRESULT: 0x8007007E)

со следующей трассировкой стека:

at System.StubHelpers.StubHelpers.GetWinRTFactoryObject(IntPtr pCPCMD) at Sqlite.Sqlite3.sqlite3_open_v2(String filename, Database& db, Int32 flags, String zVfs) at SQLite.Net.Platform.WindowsPhone8.SQLiteApiWP8.Open(Byte[] filename, IDbHandle& db, Int32 flags, IntPtr zVfs) at SQLite.Net.SQLiteConnection..ctor(ISQLitePlatform sqlitePlatform, String databasePath, SQLiteOpenFlags openFlags, Boolean storeDateTimeAsTicks, IBlobSerializer serializer, IDictionary`2 tableMappings, IDictionary`2 extraTypeMappings, IContractResolver resolver) at SQLite.Net.SQLiteConnection..ctor(ISQLitePlatform sqlitePlatform, String databasePath, Boolean storeDateTimeAsTicks, IBlobSerializer serializer, IDictionary`2 tableMappings, IDictionary`2 extraTypeMappings, IContractResolver resolver) at DatabaseContext.OnCreate(String databaseFilePath)

ОБНОВЛЕНИЕ 2: вышеприведенное сообщение об ошибке появляется ТОЛЬКО после того, как я добавляю ссылку на мою переносимую библиотеку классов Windows Phone 8.1 (которая содержит весь код SQLite) в проект компонента среды выполнения Windows BackgroundTask. На этом этапе должно быть:

  • SQLite для Windows Phone 8.1
  • SQLite для Windows Phone

SDK оба загружаются в полное приложение. В этот момент я предполагаю, что ссылка на Windows Phone 8.1 загружается, а ссылка на Windows Phone - нет, потому что она считается уже существующей. Это полная догадка, но, похоже, она соответствует тому, что я вижу. Есть мысли о том, как поступить? Спасибо!

2 ответа

Решение

Я нашел решение:

Добавьте ссылку на dll SQLite только в проекте приложения Silverlight и ничего в проекте фоновой задачи (WinRT Runtime Component).

Библиотека nuget SQLite.net найдет dll во время выполнения, как в проекте приложения, так и в проекте фоновой задачи (WinRT Runtime Component).

Удалите файл pdb из пакетов nuget.

Другие вопросы по тегам