Win8 Javascript Metro应用程序,与c# WinRT组件和SQLite

本文关键字:WinRT 组件 SQLite Javascript Metro 应用程序 Win8 | 更新日期: 2023-09-27 18:07:09

我正在创建一个Windows 8商店应用程序。这个应用程序的前端(主要项目)是在HTML5/Javascript。我正在遵循Tim Heuer的指南来创建一个c# WinRT组件,该组件包装SQLite调用并表现为控制器。前端通过Javascript调用该组件来更新数据,并获取表示内容。

所以我的解决方案中有2个项目,javascript中的"main"和c#中的"db"。我已经根据指南设法获得SQLite工作。我之所以使用这种结构是因为我正尝试着将一款应用从iOS移植到Win8。"控制器"部分从一开始就是一个独立的组件,它已经移植到c#中了。

然而,有一个警告。由于这个已知的问题,我不得不从'db'项目中删除对c++ Runtime v11的引用,以使其可编译。虽然它在开发机器上运行得很好。

然后我得到了这台测试机器(确切地说是三星xe700t1a,英特尔i5),我发现在这台测试机器上"远程调试"时,Visual Studio不会部署SQLite3。结果,我的SQLite调用失败,错误:"Unable to load DLL 'sqlite3': The specified module could not be found. (Exception from HRESULT: 0x8007007E)" .

根据我前面提到的指南,SQLite通过WinRT扩展提供的目的是使部署自动化。

我想知道为什么会发生这种情况,如何使它正确?我还想知道在这种结构下,Windows Store的应用程序是否存在认证问题?

我也看到了这篇文章,这篇文章建议目前不可能在WinRT组件中使用SQLite。但是现在改变对我来说已经太晚了,没有混合结构这个项目是不可能的。

Win8 Javascript Metro应用程序,与c# WinRT组件和SQLite

我找到了解决方案。我使用了这篇文章中的提示,它非常简单。

我要做的是在解决方案中创建另一个项目,输出类型设置为c#类库。将引用移动到SQLite for WinRT,并将SQLite -net (nuget)包装器移动到这个新项目。之后,我必须手动遍历sqlite-net中的类,并将所有的"内部"类更改为"公共"。

对于原始的控制器项目,我添加了using myclasslib;以便找到类定义。

显然这个解决方法将完美地工作。已经部署了SQLite3,并且没有对缺少引用的警告。