web-dev-qa-db-ja.com

モバイルで実行されているユニバーサルWindowsアプリでDLL sqlite3を読み込めません

UWPを開発しています。私はsqlite-net-pclライブラリを使用しています。アプリケーションをRCからRTM)にアップグレードした後、モバイルエミュレーターまたはデバイスで実行すると、ランタイムエラー(sqlite3.dllが見つかりません)が発生しました。 C++ 2013ランタイムパッケージへの参照と私はそれをローカルマシンで実行しました。

例外メッセージ:

メッセージ「「SQLitePCL.raw」の型初期化子が例外をスローしました。」ストリング

内部例外メッセージ:

{"ロードできませんDLL 'sqlite3':指定されたモジュールが見つかりませんでした。(HRESULTからの例外:0x8007007E)"} System.Exception {System.DllNotFoundException}

もちろん、次のエラーが発生するため、「ユニバーサルアプリプラットフォーム用のSqlite」に参照を追加できませんでした

重大度コード説明プロジェクトファイル行エラーペイロードに、同じ宛先パス「sqlite3.dll」を持つ2つ以上のファイルが含まれています。ソースファイル:C:\ Program Files(x86)\ Microsoft SDKs\UAP\v0.8.0.0\ExtensionSDKs\SQLite.UAP.2015\3.8.11.1\Redist\Debug\ARM\sqlite3.dll C:\ Users\sMavrikis .nu​​get\packages\SQLitePCL.raw_basic\0.7.1\build\native\sqlite3_dynamic\winrt81\arm\sqlite3.dll TestApp1

15
Stam

'SQLite for Universal App Platform'への参照を追加します。これにより、エラーがトリガーされます。

ペイロードには、同じ宛先パス「sqlite3.dll」を持つ2つ以上のファイルが含まれています。

このエラーは、エラーでマークされた両方の場所でsqlite3.dllのバージョンが異なるために発生します。コピーするだけでこのエラーを解決します

C:\ Program Files(x86)\ Microsoft SDKs\UAP\v0.8.0.0\ExtensionSDKs\SQLite.UAP.2015\3.8.11.1\Redist\Debug\ARM\sqlite3.dll

C:\ Users \%USERNAME%\。nuget\packages\SQLitePCL.raw_basic\0.7.1\build\native\sqlite3_dynamic\winrt81\arm\sqlite3.dll

既存のファイルを上書きします。

プロジェクトを再構築します。今すぐコンパイルする必要があります。

33
iftitaj

競合する2つの場所を見ると、1つはUWP用のより公式なMicrosoft拡張機能からのものであり、もう1つはnuGetパッケージからのものであるようです。

このエラーが発生したとき、nuGetパッケージの機能が必要だったので、それを保持して他の参照を削除することにしました。ソリューションエクスプローラーでプロジェクトを右クリックし、[追加]-> [参照]に移動して、SQLiteへの参照のチェックを外しました。ある場所から別の場所にファイルをコピーするよりも、エラーが発生しにくいように見えました。

enter image description here

9
user6457623

同じエラーメッセージが表示されていました。私はSQLite-PCLを使用することから始めましたが、これにはユニバーサルアプリプラットフォーム用のSQLiteも参照として必要でした。その後、SQLite.Net-PCLに切り替えました。それは私がそれらのエラーを得たときです。解決策を研究しているときに、私はこのページを見つけました。それは少しの間働いた。最終的に、ユニバーサルアプリプラットフォーム用のSQLiteへの参照を削除し、エラーはなくなりました。

2
Will Autio

コンパイラー構成でx64またはarmを選択することにより、同様の問題を修正しました。

エラーペイロードに、同じ宛先パス 'e_sqlite3.dll'を持つ2つ以上のファイルが含まれています。ソースファイル:C:\ Users\xleon.nuget\packages\SQLitePCLRaw.lib.e_sqlite3.v140\1.1.0\runtimes\win10-arm\native\e_sqlite3.dll C:\ Users\xleon.nuget\packages\sqlitepclraw。 lib.e_sqlite3.v140\1.1.0\runtimes\win10-x86\native\e_sqlite3.dll

もちろん、これではエミュレータを実行できません

0
xleon

返信が遅れましたが、問題が発生しました。私にとってそれを修正したのは、パッケージの1つがまだ古い参照を使用していて、古い別のプロジェクトを参照している実行中のプロジェクトにプルスルーしていたため、ソリューション内のすべてのプロジェクトでNugetパッケージの更新を行うことでした。

0
Heinrich

UWPプロジェクトを右クリックし、[プロパティ]を選択します。

また、ソリューションプラットフォームのターゲットがプロジェクトプラットフォームのターゲットと一致していることを確認してください。

それらが異なる場合、同じ名前で同じ宛先にファイルをコピーすることに関するビルドエラーが発生します(ただし、ターゲットプラットフォームは異なります)。

Ensure matching target platforms

0
Kwame

SQLitedllを含めるための条件をUWP.csprojに配置することで、この不一致を解決することができました。

<SDKReference Include="SQLite.UWP.2015, Version=3.19.3" Condition="'$(Configuration)'=='Debug'">
  <Name>SQLite for Universal Windows Platform</Name>
</SDKReference>

デバッグのためにUWPバージョンで実行する必要がありました。そうしないと、XAMlデザイナーが「SQLite.dllが見つかりません...」と爆発します。

0
sk4tec