いつも勉強させていただいています。参照して使用しています。とセットで、foo.dllのコピーが出来ます。/本番/COM/foo.dllを参照させたいので、ローカルコピーをしない設定にすると、foo.dllが参照できずに、コンパイルエラーになります。いって、絶対パスを指定する方法が見つからずに困っています。C#って、どうして、絶対パスで参照せずに、デフォルトでいちいちコピーする設定にしてるのか凄く疑問なのですが・・。わかる方、ご教示お願いいたします。入れてあげれば可能です。入れなくても、全く無関係のディレクトリに入れる方法もあるようですが、詳細はよく知りません。ローカルコピーをしない方法ですがソース管理でリンクやジャンクション(?)を作成することによって可能にはなりますがデメリットのほうが大きいと思います。(一括チェックアウトが出来なくなるなど)諸々のデメリットに目を瞑るというのであればビルドイベントでコピーするなどすれば絶対パスでの指定も可能だと思います。様ありがとうございます。様参考にさせていただきます。GACの登録に関して、わからない点が明確になったら、またご相談させていただきます。ありがとうございました。様まだ、黒龍様の話が充分に理解できる知識やスキル経験がないようです。お話を聞いても、ローカルコピーの有用性がわからないままです。ありがとうございました。入れてあげれば可能です。入れなくても、全く無関係のディレクトリに入れる方法もあるようですが、詳細はよく知りません。http://msdn2.microsoft.com/ja-jp/library/yx7xezcf(VS.80).aspx私がやりたいことは、お客様からもらったdll群が入ったディレクトリを直接参照してアプリを動かすことです。dll群のパスは決め打ちなので、「絶対パスで参照すれば問題ないじゃん」と思っています。参照設定とかせずに、直接プログラムに書き込んでも問題ないのであれば、そうしてもいいくらいです。アプリケーション設定ファイルに書き込めば良いというQ&Aサイトも見つけましたが、そのファイルがどれなのか、どこにどう書けばいいのかも、わかりません。http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=7180&forum=7GACや厳密名について、VSのヘルプや他のサイトを見てみましたが、解説が難しすぎて、作業方法の整頓すら出来なくなってしまいました。このGACで解決されているためにローカルコピーされずに済んでいることはわかりました。様は、このフォルダを任意のパスにすることはできないとおっしゃっているこの認識があっていたとすると、私がやりたいことは実現できないと解釈します。仮に、任意のパスのdllを厳密名として登録し、プログラムがdllの存在場所を特定できるならば、GACに登録することで、私がやりたいことが実現できそうですが、*1の作業内容が明確に理解できていません。こちらの研究不足が目立つ質問ではありますが、追ってご教示賜りたく宜しくお願いいたします。ローカルコピーせずに、ズバッとそのdllの場所を教えてあげるだけなのに、何でこんなに遠回りしなければならないのかと、つくづく不思議でなりません。んなに遠回りしなければならないのかと、つくづく不思議でなりません。本番のときにexeはどこに置きますか?ローカルCOPYされてしまうのは、実行環境でEXEとDLLが同じフォルダにあるはずだという認識で探し始めるからです。そのため、GACじゃなければ、開発環境下でもEXEとDLLを同じフォルダにいれるためにローカルCOPYされるのです。それでは例えば、/本番フォルダに置いたときに/本番/COMフォルダの中のDLLを探すにはどうしたらいいでしょうか。その場合は、app.configにDLLに対する相対パスを記述してDLLの位置を指定します(../DLLのように)。詳しくは、http://www.atmarkit.co.jp/fdotnet/technology/idnfw11_03/idnfw11_03_03.htmlあたりを読んでみて下さい。私としては、EXEとDLLを同じフォルダに入れるのがお勧めです。いう言葉をご存じでしょうか。なんだけど、バージョンが違うとインターフェイスが動作が変わり、バージョンの管理を厳密にしなければ、バグが大量発生してしまう...という、過去の事例があります。ロードしないようになっています。この仕組みが絶対です。その上で、どの様に管理するか。インターフェイスや動作の違いがないことをどの様に保証するか。そのようなことを吟味した上で、配置/参照する方法を決めることを勧めます。・GACに入れる・EXEの配下のディレクトリに入れる。不可能なら無理やりバイナリで読み込む。オンメモリで展開してアセンブリに読み込ます。なんてことを普通にできなきゃ無理です。以前のDLLのような適当な共有フォルダ方式はできないと思ってください。確認しておかねばならない事は「お客様からもらったdll群」に厳密名が付いているかどうかです。厳密名がついていないとプライベート配置以外できません。まともな開発者ならば厳密名を付けている筈なので、話を進めます。厳密名が付いているアセンブリならば、プライベート、GAC、さらに任意のディレクトリに配置できるはずです。私は任意のディレクトリに配置するやり方をした事がありませんので、誤った説明があるやもしれない事をご容赦下さい。要素にそのディレクトリのパスを書いてください。そもそも、多数のアプリケーションから参照されるアセンブリでない限り、プライベート配置にするのが普通です。なければ、インストールとアンインストールが面倒になります。指定のディレクトリをなめてLoadFromっていうとんでもなくお勧めできない方法もあったりします。ええ、とんでもなくお勧めできないので基本的にやっちゃいけません。なくお勧めできない方法もあったりします。あ、いやこれだと静的に参照してたらアウトだったかな...うろ覚え。プライベート配置される事を嫌うのでしょうか?おそらくですが僕の書き方が悪かった&GACを勧める方多数なのでだと思います。GACでは特定バージョンへの固定がされたはずなのでそもそも要望を満たさない気がしておりますが...。どこぶら下げるか迷ったんですが...もらったものは、GACへのインストールをしてくれるインストーラはついてないんですよね?なら、GACは候補から外してください。もらったものを勝手にGACに入れるなんざ、御法度です。意味するのであれば、インストーラあるはずなんで、それを使って開発環境に「インストール」してください。コンポーネントとしてそういうフォルダ名にしてるだけならいいんですが...あとは、提供元にきちんと使い方を教わってください。ここで聞いてても埒あかないというより、誰も解決できないですよ。>皆様お礼を申し上げるのが、大変遅れてしまいました。問題は解消しましたが、技術知識面で解消されることはありませんでした。基本的には、私の勉強不足が原因です。コレを読まれたら顔をしかめられる方もいらっしゃるかもしれませんが、ちゃんと整頓しておきたいので、私の今のイメージを申し上げます。非常に素人的な発想です。あるexe群があり、それらがdllを使用しているとしますよね。1.exeも2.exeもa.dllを使用しているとします。1.exeと2.exeのパスが動的など、不確定な場合、a.dllがどこにあるかわからなくなってしまいますよね。これは、ウェブページとその中に貼付けられる画像のような関係に捕らえています。この例えで言うと、動的なパスで管理されている複数のページが画像を参照しようとするとき、絶対パスまたは、相対パスで参照させるはずです。画像入れ替えのとき、一回で済むし、同意義のファイルが散在しなくて済むからです。ウェブページが動作するたびに、画像を、ウェブページと同じパスに持ってくるという動きは非常にナンセンスに思えます。皆さんのお話をお伺いしていると、どうやら、私のイメージの仕方が悪かったのでしょうけど、そんな状態なので、なんでローカルにdllがおりてきちゃうのか疑問でなりません。dllがバージョンアップしたら、いちいち配置してあげないと・・ですよね。このあたりの疑問にお答え頂ける方、申し訳ありませんが、簡単なたとえ話でもあれば、何とか理解できると思うのですが、宜しくお願いいたします。あれば、何とか理解できると思うのですが、宜しくお願いいたします。.NETでは、exeとdllを同じフォルダに入れるか、GACとしてDLLの位置を覚えさせるかのどちらかの方法を基本にしているからです。これは決まりだから納得できるかどうかの問題ではなく、そういうものなのですとしか説明のしようがないです。dllをバージョンアップしたらexeとdllを同じフォルダにいれてあげるか、GACに登録(この場合、バージョンごとに別保存になります)かです。exeとdllを同じ位置に配置するときであれば、実行時環境が立ち上がるときにdllをexeと同じ場所に自動COPYするので配置の手間はありません。「出来る」と私は2度も書いてますが、読んでいただけましたでしょうか。DLL」には「厳密名」が付いている必要があります。その場所をアプリケーションの構成ファイルに書いてあげればできます。入れれば構成ファイルに書く必要もなく参照できます。地獄の防止のためです。地獄の心配がないので、別に厳密名が付いている必要はないという事です。きにdllをexeと同じ場所に自動COPYするので配置の手間はありません。↓実行時環境ではなく開発時環境(IDE)の間違いです。dllがバージョンアップしたら、いちいち配置してあげないと・・ですよね。バージョンアップ時の対応(=特定バージョンとの結び付けをしない)ということは可能です。(参照時の設定になります)相対パス、絶対パス...という話ですが共有フォルダやジャンクションの作成などこちらも可能な設定です。例としてインターネットの画像の話が挙げられていましたがネットワーク越しのdll参照もまた可能です。このように.NetFramework自体の対応状況というのは多岐にわたっているので質問にあるような特定のケースを想像して当てはまらない=機能不足というのは早計な気がします。すみませんが、同じようなところで悩んでいるので、便乗させてください。私も、サーバ上にexeとdllを配置し、そこからの配布を行います。各クライアントへの配布の際ですが、クリックワンスを使用しようか迷っております。本当は、ノータッチデプロイメントのように、exeへのリンクを示すだけで、初回のインストール画面を出さずに開始したいのですが、そのようにしますと、GACへの登録という方法をとることになってしまうんですよね?クリックワンスでの配布でしたら、exeとdllを配布し、動作確認もとれています。これが皆さんが言われている、�@[exeとdllを同じフォルダにいれてあげる]の方法のひとつで宜しいでしょうか?これに対して、�A[GACに登録]は、いくつかのサイトを拝見したところあまり推奨されておりません。その理由としましては、dll地獄がよくあげられており、その対応として、厳密名をつけるということで宜しいでしょうか?その他推奨されていない理由がありましたら教えていただきたいです。その他、なちゃさんが記述されているLoadFromなどの方法もありますが、これもやらない方良いということですよね?使用してみたところ、特に問題点は感じられなかったのですが、これをやってしまうと、どのようなことになるのか教えていただきたいです。以上宜しく御願い致します。