概要
ClickOnceでSystem.Data.SQLiteを使うアプリを発行する場合、
何も対処しないと実行時に以下の例外が発生してしまいます。
その対処法です。
ハンドルされていない例外: System.DllNotFoundException: DLL 'SQLite.Interop.dll' を読み込めません:指定されたモジュールが 見つかりません。 (HRESULT からの例外:0x8007007E)
場所 System.Data.SQLite.UnsafeNativeMethods.sqlite3_config_none(SQLiteConfigOpsEnum op)
場所 System.Data.SQLite.SQLite3.StaticIsInitialized()
場所 System.Data.SQLite.SQLiteLog.Initialize()
場所 System.Data.SQLite.SQLiteConnection..ctor(String connectionString, Boolean parseViaFramework)
場所 System.Data.SQLite.SQLiteConnection..ctor(String connectionString)
場所 SQLiteMigrationSample.Program.Main(String[] args)
やり方
追加したx64のフォルダに対して、右クリックから[追加]-[既存の項目]を選択します。
x64に対応するSQLite.Interop.dllを選択し、[リンクとして追加]を行います。
対応するdllは、例えばpackages/System.Data.SQLite.Core.1.0.108.0/build/net46/x64/SQLite.Interop.dllにあります。
同様にx86フォルダに対してもdllを追加します。
最終的に以下の感じになります。
[プロジェクトのプロパティ]-[発行タブ]-[アプリケーションファイル]に追加したdllがあればOKです。
この状態で今まで通り発行すると、x64/x86フォルダのdllもパッケージに含まれ、正しく動作するようになります。
コメント
SQLite以外でも、x64/x86フォルダにDLLがあるライブラリで使えるはずです。