私のソリューションには、次の実行可能ファイルの出力構造があります。
%プログラムファイル%
| |
+-[マイアプリ名]
| |
+-[クライアント]
| | | |
| | +-(EXE といくつかの DLL アセンブリ)
| |
+-[共通]
| | | |
| | +-[スキーマ アセンブリ]
| | | | | |
| | | | +-(複数の DLL アセンブリ)
| | | |
| | +-(複数の DLL アセンブリ)
| |
+-[サーバー]
| |
+-(EXE といくつかの DLL アセンブリ)
ソリューション内の各プロジェクトは、異なる DLL アセンブリを参照します。その一部はソリューション内の他のプロジェクトからの出力であり、その他はプレーンなサードパーティ アセンブリです。たとえば、[Client] EXE は、別のディレクトリ ブランチにある [Common] のアセンブリを参照する場合があります。
最終的にインストールされたアプリケーションのファイルのレイアウトをミラーリングするために、すべての参照で "Copy Local" が false に設定されています。
ここで、Visual Studio IDE で参照プロパティを確認すると、すべての参照の「パス」が絶対パスであり、アセンブリの実際の出力場所に対応していることがわかります。それは理解できて正しいです。予想どおり、ソリューションは正常にコンパイルおよび実行されます。
私が理解できないのは、IDE を閉じて [MyAppName] ディレクトリの名前を変更し、[Client] EXE を手動で実行しても、すべてが機能しているように見えるのはなぜですか? 参照パスがリンク時のものと同じでない場合、ランタイムはどのようにアセンブリを見つけますか?
明確にするために、これはまさに私が求めているものです。[MyAppName] ディレクトリの場所や名前に関係なく、正常に動作する半分散型のアプリケーション ファイルのセットです。私の側で特定のパス解決がなくても、これがどのように、そしてなぜ機能するのかを知りたいだけです。
この同様の質問への回答を読みましたが、まだわかりません。
大変助かりました!