1

一般的な LOB アプリには Visual Studio 2012 を使用しています。このアプリには、DAL、BLL、および UI レイヤーがあります。

Sqlite を除くすべてのプロジェクトは、Portable Class Library (PCL) に基づいているため、一度コンパイルすれば、すべてのプラットフォームで動作します。

ただし、データベースは Sqlite です。Sqlite はネイティブ コードを使用するため、プラットフォームごとにパッケージをデプロイする必要があります。たとえば、ARM プロセッサ用にデプロイする必要がある場合、Sqlite は下位層に配置されるため、すべてのプロジェクト (20 以上) を ARM 用に再コンパイルする必要があります。ほとんどのプロジェクトは、Sqlite が配置されている DAL に直接的または間接的に依存しています。

このシナリオを解決するための最良のアプローチはどれですか?

ありがとうございました

4

2 に答える 2

3

SQLite for .NET については、このWeb ページをご覧ください。

プラットフォームに依存しないバージョンの SQLite.dll があります。プラットフォーム固有のネイティブ コードを含む追加の DLL を動的に読み込みます。次のディレクトリ レイアウトを提案します (アプリケーション ディレクトリ内)。

System.Data.SQLite.dll (required, managed-only core assembly)
System.Data.SQLite.Linq.dll (optional, managed-only LINQ assembly)
x86\SQLite.Interop.dll (required, x86 native interop assembly)
x64\SQLite.Interop.dll (required, x64 native interop assembly)

プロジェクトでは、プラットフォームに依存しないマネージのみの DLL のみを追加します。そのため、一度コンパイルすれば、すべてのプラットフォームで実行できます。マネージのみからネイティブ DLL へのハード リンクはありません。これは実行時にのみ解決されます。

このアプローチを ARM アーキテクチャに拡張できることを願っています。

このページには、混合モードのアセンブリ、一部の VC ランタイム ライブラリに対して動的にリンクされたアセンブリなども含まれていることに注意してください。これらは避けたほうがよいでしょう。彼らは多くの頭痛を引き起こします。

于 2012-12-30T09:56:49.240 に答える
1

アプリにネイティブ ライブラリを含めるとすぐに、各プラットフォームに適切なライブラリが含まれるように、プラットフォームごとに個別のパッケージをビルドする必要があります。

SQLite for Windows ランタイム Visual Studio 拡張機能をまだ使用していない場合は、使用する必要があります。参照の追加ダイアログに SQLite を拡張機能として追加します。そこからプロジェクトに追加すると、ビルドを行うたびに、適切なプロジェクトのネイティブ ライブラリが自動的に含まれます。

.NET からネイティブ ライブラリにアクセスするには、プラットフォームに依存しないsqlite-netを使用できます。

PCL を使用しているため、WinRT 専用のアプリを作成していない可能性があります。この場合、答えは完全には当てはまらないかもしれませんが、より具体的なアドバイスを提供するには、より多くの情報が必要です.

于 2012-12-31T07:46:02.183 に答える