在WinRT应用程序中使用SQLite时出现异常
我正在构建一个Windows 8应用程序,现在我想将SQLite用于此应用程序。我通过Visual Studio 2013扩展管理器安装了用于Windows运行时的在WinRT应用程序中使用SQLite时出现异常,sqlite,windows-runtime,sqlite-net,Sqlite,Windows Runtime,Sqlite Net,我正在构建一个Windows 8应用程序,现在我想将SQLite用于此应用程序。我通过Visual Studio 2013扩展管理器安装了用于Windows运行时的SQLite,并通过NuGet将SQLite net添加到我的项目中 我试图在我的app.xaml.csOnLaunched中创建一个数据库,但我在运行项目时遇到此异常: 无法加载DLL“sqlite3”:找不到指定的模块。 (来自HRESULT的异常:0x8007007E) 这很奇怪,因为编译过程中没有错误。无论如何,我认为它试图告
SQLite
,并通过NuGet将SQLite net
添加到我的项目中
我试图在我的app.xaml.csOnLaunched
中创建一个数据库,但我在运行项目时遇到此异常:
无法加载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。所以我有两个问题:
private void InitializeDatabase()
{
var db = new SQLiteConnection("Googalytics");
db.CreateTable<Account>();
db.CreateTable<WebProperty>();
db.CreateTable<Profile>();
}
edit2:有关我的设置的更多信息:
- Visual Studio 2013 RC
- Windows 8.1 RTM
- SQLite for Windows Runtime 3.8.0.2
- sqlite net 1.0.7
更新 我试图复制你的问题。我为Visual Studio Ultimate 2012安装了
SQLite for Windows Runtime
,之后我创建了一个Windows应用商店项目,然后添加了SQLite引用,之后我添加了SQLite net
,最后我添加了用于DB创建的代码
我稍微修改了代码(路径和表)。但是我的代码没有给出任何错误
我自己不需要引用SqLite程序集。因为通过将扩展安装到Visual Studio中,您可以在扩展列表中获得引用(仍然需要选择它,而不是添加DLL):
但正如我在第一个答案中所说,您需要将构建模式设置为“任何CPU”以外的其他模式
我的示例在我的上(测试时将配置设置为x86)
更新2 数据库路径:
var dbPath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "db.sqlite");
var db = new SQLite.SQLiteConnection(dbPath);
我在configuration manager中将“active solution platform”设置为x86,但在尝试将x86程序集添加到我的项目(调试版本和发布版本)时仍然会遇到相同的错误。这是一部电影IE:这样我就可以重现problem@LeonCullens添加了额外的信息该死。。。我做错了什么:我尝试通过添加引用->浏览手动添加DLL。当我从Extensions列表中选择它时,它工作得非常好(好吧……SQLite仍然抛出一个异常,但另一个异常……可能是代码问题)。
var dbPath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "db.sqlite");
var db = new SQLite.SQLiteConnection(dbPath);