質問: ### 前提・実現したいこと お世話になります。初めてご質問させていただきます。 現在C#でOracleのデータベースに接続するクラスライブラリを自作しています。 Oracleの操作にはNugetパッケージの管理から下記DLLをインストール・参照して使用しています。 Oracle.ManagedDataAccess v12.2.1100 ### 発生している問題・エラーメッセージ 新規のプロジェクトを作成して、自作したクラスライブラリを参照して使用すると 次の例外が発生してしまいます。 System.IO.FileNotFoundException: 'ファイルまたはアセンブリ 'Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。' ### 試したこと 自作のクラスライブラリ内のオラクルの操作クラスを新規プロジェクトにコピーをして 自作ライブラリで使用しているOracle.ManagedDataAccess v12.2.1100をNugetパッケージの管理からインストールするとOracleのデータベースの読み書きができました。 また一度Oracle.ManagedDataAccessをプロジェクトにインストールした後、 Oracle.ManagedDataAccessへの参照を削除して自作ライブラリへの参照を追加して 実行するとOracleのデータベースの読み書きができました。 ### お聞きしたいこと 以上からおそらく新規で作成したプロジェクトから自作ライブラリのオラクル操作クラスを使用する時にOracle.ManagedDataAccessへの参照が見つけられないためにSystem.IO.FileNotFoundExceptionの例外が発生しているのではないかと考えています。 今回のように自作ライブラリで参照しているDLLを別のプロジェクトからも使えるようにするにはどうしたら良いのでしょうか。 もしくは別の原因でこの問題が起きているのであればご教授いただきたく質問させていただきました。 ### 開発環境 Windows8.1 VisualStudio2017 FrameWork4.5.2 ### 不足している情報があればご指摘下さい。 よろしくお願い致します。
回答: exeのフォルダにOracle.ManagedDataAccessのDLLが存在していると思います。 Nugetで参照追加した場合はこのDLLコピーを自動でやってくれます。 一度Nugetでインストールした後削除しても動くのはDLLがそのまま残っているからです。 ソリューションのクリーンをすると動かなくなるはずです。 参照している自作DLLのフォルダにOracle.ManagedDataAccessのDLLもあるはずなので、 手動でコピーすれば動きます。 ちなみにDLL単体で参照するのではなく、自作のクラスライブラリのプロジェクトを ソリューションに追加して、プロジェクトごと参照すればDLLのコピーも 自動で行われると思います。