「参照」の追加について
C#(.NET)のプロジェクトでは、使うライブラリ(dll)を参照の設定に入れておくと、コーディング時にその中に含まれるメソッドを使うことができ、またビルド時には、参照にいれたdllを自分(exeやdll)と同じフォルダにコピーしてくれる。(ローカルにコピーをtrueにしているとき)
が、一部のdllについて、自動で出力先フォルダにコピーされてくれない奴がいる気がする。それはどうも「C++で作成したdll」イコール「非.NETのdll」っぽい。
そういうやつら(dll)を使うときは、VisualStudio上でどういう設定をしたらよいのか?
その参照を使う上で気づいたこと、知ったことを下記にメモ。
調べたこと・知ったこと・気づいたこと
- 同じソリューションの中のプロジェクトで作っているdllを他のプロジェクトで使うときは、「参照」の追加画面で、「プロジェクト」を参照に追加すること。
-
dllのプロジェクトがbinフォルダなどに吐いたdllファイル自体に、直接アセンブリの参照を追加してはいけない。かならず、同じ
プロジェクトソリューションの中のdllを使うときは、「プロジェクト」で参照すること。 - 「参照」の設定は、.NETのモノだけで行うことができる。(C#、VB、C++/CLI)
- 「参照」の設定は、C++ネイティブの非.NETのアセンブリ(C++のdllなど)を入れることはできない。
- そういうときは参照で、その「非.NETプロジェクト」ではなく、「非.NETプロジェクトが吐いたdll」を、アセンブリの参照で直接参照する。
- また、**「ビルド後イベント」**で、その非.NETアセンブリを、そいつを必要とするものと同じ階層にコピーしてやるようにする。
- 同じソリューションに含まれない.NETのdll、他の人が作った.NETのdllを使うときは、そのdllをソリューション内のどこかに置いて、そのdllファイルを「参照」でアセンブリとして追加する。
- .NETでないdllの場合は、同じソリューションに含まれる、含まれないにかかわらず、ソリューション内のどこかに置いて、そのdllファイルを「参照」でアセンブリとして追加する。
参考
■「'**.dll' への参照を追加できませんでした。」への対処方法
https://so-zou.jp/software/tech/programming/c-sharp/troubleshooting/dll-could-not-be-added.htm
■How to: Add or remove references by using the Reference Manager
https://docs.microsoft.com/ja-jp/visualstudio/ide/how-to-add-or-remove-references-by-using-the-reference-manager?view=vs-2019#assemblies-tab
>ここに、「同じソリューション内の別のプロジェクトの出力にファイル参照を追加しないでください。これを行うと、コンパイルエラーが発生する可能性があります。 代わりに、[ 参照の追加 ]ダイアログボックスの[ プロジェクト ]タブを使用して、プロジェクト間参照を作成します。これにより、プロジェクトで作成したクラスライブラリの管理が改善され、チーム開発が容易になります。
」とある。