在 WinRT 应用程序中使用 SQLite 时发生异常

4
我正在构建一个Windows 8应用程序,现在我想在该应用程序中使用SQLite。我通过Visual Studio 2013扩展管理器安装了“SQLite for Windows Runtime”,并通过NuGet将“sqlite-net”添加到我的项目中。
我试图在我的app.xaml.cs“OnLaunched”中创建一个数据库,但是当我运行项目时,却遇到了以下异常:
无法加载DLL文件“sqlite3”:找不到指定的模块。(HRESULT异常:0x8007007E)
这很奇怪,因为编译过程中没有错误。无论如何,我认为它试图告诉我需要引用附加的DLL文件:"sqlite3.dll",但这没用。我在文件系统上有6个不同的DLL文件:ARM、x64和x86的调试和发布版本。我尝试将x86发布版本添加到我的项目中,但结果出现此异常:
对 'C:\Users\Leon\Documents\Visual Studio 2013\Projects\Googalytics\packages\SQLite\x86\sqlite3.dll' 的引用无法添加。请确保文件可访问,并且是有效的程序集或COM组件。
令人非常沮丧的是,sqlite-net的文档很糟糕,非常过时(示例不再起作用),非常不完整,也没有提及手动添加DLL文件。所以我有两个问题:
1.如何解决这个问题?
2.在哪里可以找到sqlite-net的最新文档?
编辑:我用于创建数据库的代码是:
private void InitializeDatabase()
{
    var db = new SQLiteConnection("Googalytics");

    db.CreateTable<Account>();
    db.CreateTable<WebProperty>();
    db.CreateTable<Profile>();
}

我从这里调用该方法:
InitializeDatabase();

if (rootFrame.Content == null)
{
    // When the navigation stack isn't restored navigate to the first page,
    // configuring the new page by passing required information as a navigation
    // parameter
    if (!rootFrame.Navigate(typeof(MainPage), args.Arguments))
    {
        throw new Exception("Failed to create initial page");
    }
}
// Ensure the current window is active
Window.Current.Activate();

编辑2: 关于我的设置,以下是一些更多的信息:

  • Visual Studio 2013 RC
  • Windows 8.1 RTM
  • SQLite for Windows Runtime 3.8.0.2
  • sqlite-net 1.0.7
1个回答

8

你的项目当前的构建模式设置为 Any CPU,默认是什么?因为 SqLite 程序集不是按 AnyCPU 构建的,所以你需要将构建模式设置为 X86 并添加 X86 SqLite 引用。

在部署应用程序时,您还需要创建 3 个包而不是 1 个 AnyCPU 包。

由于你的项目是 AnyCPU,当尝试添加 x86 时你会收到错误消息,因为 x86 对于 AnyCPU 不合法。


UPDATE

我尝试复制你的问题。我安装了 SQLite for Windows Runtime 插件于 Visual Studio Ultimate 2012 中,然后创建了一个 Windows Store 项目,之后添加了 SqLite 引用,接着添加了 sqlite-net,最后添加了你用于数据库创建的代码。

我稍微修改了代码(路径和表)。但我的代码完全没有出错。

我不需要手动引用 SqLite 程序集。因为通过在 Visual Studio 中安装扩展程序,你可以在扩展列表中获得该引用(仍需要选择它,但不需要添加 dll 文件):

add reference

但就像我在第一次回答中所说的那样,你需要将构建模式设置为除 'Any CPU' 以外的其他模式。

我的示例在我的skydrive上(测试时将配置设置为 x86)。


UPDATE 2

数据库路径:

var dbPath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "db.sqlite");
var db = new SQLite.SQLiteConnection(dbPath);

我在配置管理器中将“活动解决方案平台”设置为x86,但是当我尝试将x86程序集添加到我的项目中时(无论是调试还是发布版本),仍然会出现相同的错误。这是一个截图:http://i.imgur.com/LEQfkAA.png - Leon Cullens
所以我可以重新创建这个问题。 - SynerCoder
@LeonCullens 添加了额外的信息。 - SynerCoder
该死...我做错了什么:我尝试手动添加DLL,通过转到添加引用->浏览。当我从扩展列表中选择它时,它可以正常工作(好吧... SQLite仍然会抛出异常,但是不同的异常...可能是代码问题)。 - Leon Cullens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接