

お世話になります。

つい以前、SQliteの接続について質問し、一度解決したと思ったのですが、望む通りの結果に至らなかったため、再度別の内容で質問させていただきます。前回回答していただいた方々には本当に申し訳のないことをしてしまいました。

SQLiteを簡単に操作できるクラスライブラリを作ろうと、『SQLitePackage』という名で新規に  
『Windowsフォームアプリケーション』としてプロジェクトを作り、NuGetでSystem.Data.SQLite.Coreをインストールし、SQLiteのファイルのデータベースアクセスするコード(クラスSqlDb)を記述し、フォームを開いて後で実行、ここまではうまくいきました。前回の質問では、ここが解決されました。

しかしその後、それらのクラスをクラスライブラリ化し、別にWindowsフォームのプロジェクトを立ち上げ、そこで先ほど作成した『SQLitePackage.dll』を参照に追加し、いざフォームのコード内で使用すると、『SQLite.Interop.dll』がないと例外が出ます。確認すると、確かにプロジェクト内にはそれらのファイルがなく、x86,x64などのフォルダも作成されていません。

その後、クラスライブラリを作成したように、呼び出し側のWindowsフォームアプリケーションでもNuGetで同SQLite.Coreをインストールすると、正しく動きようになりました。

やりたいことは、呼び出し側のWindowsフォームのプロジェクトでは、自作したDLL、『SQLitePackage.dll』のみを参照追加するだけでSQLiteを使用できるようにしたいのです。

どうしてもプロジェクトごとNuGetのインストールが発生してしまうのですが、これを省略することはできないのでしょうか。

よろしくお願いいたします。


CC BY-SA 4.0
2020-02-27T02:24:56.020
63394
2020-02-28T01:40:05.073
2020-02-27T05:11:50.990
9374
9374
question
c# sqlite dll nuget
C# SQLiteを操作するクラスをクラスライブラリ化したときにInterop.dllを要求される点について


[System.Data.SQLite.Core](http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki#nativeLibraryPreLoading)では

>   * \App.exe (optional, managed-only application executable assembly)
>   * \App.dll (optional, managed-only application library assembly)
>   * \System.Data.SQLite.dll (required, managed-only core assembly)
>   * \System.Data.SQLite.Linq.dll (optional, managed-only LINQ assembly)
>   * \System.Data.SQLite.EF6.dll (optional, managed-only EF6 assembly)
>   * \x86\SQLite.Interop.dll (required, x86 native interop assembly)
>   * \x64\SQLite.Interop.dll (required, x64 native interop assembly)
>

というディレクトリ構成を想定しているので、これが実現できるようにSQLite.Interop.dllをコピーしましょう。


CC BY-SA 4.0
2020-02-27T05:57:04.750
63399
2020-02-27T05:57:04.750
4236
63394
answer


自己レスです。

どうやら現在の環境での解決策は、NuGetを自作するのが最も良いようです。回答していただいた皆様、ありがとうございました。


CC BY-SA 4.0
2020-02-28T01:40:05.073
63422
2020-02-28T01:40:05.073
9374
63394
answer