У меня есть следующая структура вывода исполняемых файлов в моем решении:
%ProgramFiles%
|
+-[MyAppName]
|
+-[Client]
| |
| +-(EXE & several DLL assemblies)
|
+-[Common]
| |
| +-[Schema Assemblies]
| | |
| | +-(several DLL assemblies)
| |
| +-(several DLL assemblies)
|
+-[Server]
|
+-(EXE & several DLL assemblies)
Каждый проект в решении ссылается на разные сборки DLL, некоторые из которых являются выходами из других проектов в решении, а другие являются сторонними сборками. Например, [Client] EXE может ссылаться на сборку в [Common], которая находится в другой ветви каталога.
Для всех ссылок "Локальное копирование" установлено в значение false, чтобы отразить расположение файлов в окончательно установленном приложении.
Теперь, если я взгляну на свойства ссылок в IDE Visual Studio, я увижу, что «Путь» каждой ссылки является абсолютным и соответствует фактическому выходному местоположению сборки. Это понятно и правильно. Как и ожидалось, решение компилируется и работает просто отлично.
Чего я не понимаю, так это того, почему все работает, даже когда я закрываю IDE, переименовываю каталог [MyAppName] и запускаю [Client] EXE вручную? Как среда выполнения находит сборки, если пути ссылок не совпадают с теми, которые были в момент компоновки?
Для ясности - это именно то, что мне нужно: полудисперсный набор файлов приложений, которые работают нормально, независимо от того, где находится каталог [MyAppName] или даже как он называется. Я просто хотел бы знать, как и почему это работает без какого-либо конкретного разрешения пути с моей стороны.
Я прочитал ответы на этот похожий вопрос , но до сих пор не понимаю.
Помощь очень ценится!