dllをどこに置いておくことができるのかについて考えてみます。
console07、console08でテストしているとおり、dllファイルとexeファイルを同じフォルダ内に置けば問題なく動作します。
では、dllファイルをexeファイルと別のフォルダで管理したいという場合、どのようにすればよいでしょうか。
その1:dllと同一名のサブフォルダ
exeファイルは、最初はdllファイルを自分と同じフォルダの中で探します。
そこに探すdllファイルがない場合、自分がいるフォルダの下層にある、dllファイルと同じ名前のフォルダ内を探します。
console08で作成した例を使うと、classtest.exeがあるフォルダの中にmyClassという名前のフォルダを作成し、そこにmyClass.dllを移動します。
classtest.exeを実行すると、もとのとおり、プログラムは正常に動作します。
このとき気をつけることは、classtest.exeのコンパイルはmyClass.dllを移動する前に終わらせておく必要がある、ということです。
もしくは、classtest.exeのコンパイル時に、myClass.dllの場所を指定して、コンパイルを行ってください。
(例:>csc /r:myClass/myClass.dll classtest.cs)
その2:構成ファイルの利用
いくつかのdllファイルを一つのフォルダにまとめておきたい、という場合はXML形式で記述する構成ファイルを利用します。
構成ファイルは、exeファイル名.configという名前で作成します。
その1で作成したmyClassフォルダの名前をbinに変更します。
この時点でclasstest.exeを実行すると例外が発生して、プログラムは異常終了します。
構成ファイルとして、以下の内容をclasstest.exeがあるフォルダの中にclasstest.exe.configという名前で保存します。
-------------------------------------------------------
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="bin"/>
</assemblyBinding>
</runtime>
</configuration>
-------------------------------------------------------
これで、binフォルダの下にあるdllを探すことができるようになるのでclasstest.exeが正常に動作するようになります。
privatePathの値は;で区切って複数のフォルダを指定することができます。
また、privatePathで指定できるのは、構成ファイルが存在しているフォルダの下層のフォルダだけのようです。
ここで紹介してきたdllの利用方法はプライベートdllと呼ばれます。
このプライベートdllを利用すれば、バージョンがことなる複数の実行ファイルが同一のマシン上にあっても、別のフォルダにインストールしてさえあればなんの問題もなく実行できることになります。
このとき、どのバージョンのdllが利用されるのかを気にする必要はありません。
あおい情報システム株式会社 小野修司(どっとねっとふぁん)