我有一个 Windows Phone Silverlight 8.1 应用程序,我想使用 Windows 运行时组件作为后台任务。在这两个项目中,我都想使用 SQLite 来访问应用程序数据库。
我在这里发现了一个类似的问题:
如何在 Windows (Phone) 8.1 的 BackgroundTask 中使用 SQLite
这几乎涵盖了这种情况,但并不完全如此。关于如何实现我所要求的任何想法?
我可以非常“接近”,我在编译阶段收到的最新错误消息如下:
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)
使用以下堆栈跟踪:
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 运行时组件项目时,才会 出现上述错误消息。必须在这一点上:
- 适用于 Windows Phone 8.1 的 SQLite
- 用于 Windows 手机的 SQLite
SDK 都被拉入到完整的应用程序中。此时,我假设正在引入 Windows Phone 8.1 引用,但没有引入 Windows Phone 引用,因为它被视为已经存在。这是完全的猜想,但它似乎与我所看到的相符。关于如何进行的任何想法?谢谢!