ClickOnceでSystem.Data.SQLiteを使うアプリを発行する場合の注意点

概要

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とx86フォルダを作成します。
create_x84_x64_folder.png

追加したx64のフォルダに対して、右クリックから[追加]-[既存の項目]を選択します。
select_add_existing_items.png

x64に対応するSQLite.Interop.dllを選択し、[リンクとして追加]を行います。
対応するdllは、例えばpackages/System.Data.SQLite.Core.1.0.108.0/build/net46/x64/SQLite.Interop.dllにあります。
add_dll_as_link.png

同様にx86フォルダに対してもdllを追加します。
最終的に以下の感じになります。
added_dll_sample_image.png

[プロジェクトのプロパティ]-[発行タブ]-[アプリケーションファイル]に追加したdllがあればOKです。
added_dll_in_application_file.png

この状態で今まで通り発行すると、x64/x86フォルダのdllもパッケージに含まれ、正しく動作するようになります。

コメント

SQLite以外でも、x64/x86フォルダにDLLがあるライブラリで使えるはずです。

参考URL

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.