如何在Windows Phone 8.1 Silverlight应用程序和WinRT运行时组件

时间:2015-08-04 19:02:19

标签: sqlite silverlight windows-runtime windows-phone-8.1 winrt-component

我的情况是我有一个Windows Phone Silverlight 8.1应用程序,我想使用Windows运行时组件作为后台任务。在这两个项目中,我都希望使用SQLite来访问应用程序数据库。

我在这里找到了类似的问题:

How to use SQLite in 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​​的建议,我已经从SQLite SDK文件夹中删除了pdb文件,这让我更进一步,即它现在至少编译。但是,我遇到了另一个问题...

然后我开始删除在后台任务中访问数据库的代码,在跳过一些“不是有效的WinRT类型”的箍之后,我处于完全编译的程度,看起来应该是工作。但是,当我尝试运行应用程序,并运行之前工作正常的代码,即在应用程序首次加载时创建数据库时,我遇到了这个错误:

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

使用以下stacktrace:

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代码)的引用添加到BackgroundTask Windows运行时组件项目,就会出现上述错误消息 ONLY 。在这一点上必须是:

  • 适用于Windows Phone 8.1的SQLite
  • 适用于Windows Phone的SQLite

SDK都被拉入完整的应用程序。在这一点上,我假设Windows Phone 8.1引用被拉入,但Windows Phone引用不是,因为它被视为已存在。这是完全猜想,但它似乎符合我所看到的。有关如何进行的任何想法?谢谢!

2 个答案:

答案 0 :(得分:2)

我找到了解决方案:

仅在Silverlight应用程序项目中添加对SQLite dll的引用,而在后台任务项目(WinRT运行时组件)中不添加任何内容。

SQLite.net nuget库将在运行时在app项目和后台任务项目(WinRT Runtime Component)中找到dll。

答案 1 :(得分:1)

从nuget包中删除pdb文件。