4

Windows 8 ストア アプリを作成しています。このアプリのフロントエンド (メイン プロジェクト) は HTML5/Javascript です。また、Tim Heuer によるこのガイドに従って、SQLite 呼び出しをラップし、コントローラーとして動作する C# WinRT コンポーネントを作成しています。フロントエンドは Javascript を介してこのコンポーネントを呼び出し、データを更新し、プレゼンテーション コンテンツを取得します。

したがって、私のソリューションには、javascript の「main」と C# の「db」の 2 つのプロジェクトがあります。ガイドに従ってSQLiteを動作させることができました。この構造になっているのは、アプリを iOS から Win8 に移植しようとしているからです。「コントローラー」部分は最初から分離されたコンポーネントであり、既に C# に移植されています。

ただし、注意点が 1 つあります。この既知の問題のため、'db' プロジェクトから C++ ランタイム v11 への参照を削除してコンパイル可能にする必要があります。開発マシンでは問題なく動作しますが。

次に、このテスト マシン (正確には samsung xe700t1a、Intel i5) を入手しました。このテスト マシンで「リモートをデバッグ」すると、Visual Studio が SQLite3 を展開しないことがわかりました。その結果、私の SQLite 呼び出しはエラーで失敗します: "Unable to load DLL 'sqlite3': The specified module could not be found. (Exception from HRESULT: 0x8007007E)".

前述のガイドによると、SQLite が WinRT 拡張機能を介して利用できるようになったポイントは、展開を自動化することです。

なぜこれが起こるのか、どうすれば正しくなるのだろうか?また、この構造のアプリの Windows ストアに認定の問題があるかどうかも疑問に思っていますか?

また、この投稿と、現在 WinRT コンポーネントで SQLite を使用できないことを示唆するこの投稿に出くわしました。でも、今さら変えても遅いし、ハイブリッドな体制がないとこのプロジェクトは成り立たない。

4

1 に答える 1

1

解決策を見つけました。この投稿のヒントを使用しましたが、非常に簡単です。

私がしなければならないことは、ソリューションに別のプロジェクトを作成し、出力タイプを C# クラス ライブラリに設定することです。WinRT の SQLite と sqlite-net (nuget) ラッパーへの参照をこの新しいプロジェクトに移動します。その後、手動で sqlite-net のクラスを調べ、すべての「内部」クラスを「パブリック」に変更する必要があります。

元のコントローラusing myclasslib;プロジェクトでは、クラス定義が見つかるように追加します。

どうやら、この回避策は問題なく機能します。SQLite3 がデプロイされており、参照の欠落に対する警告はありません。

于 2013-04-06T12:57:25.360 に答える