У меня есть следующая структура вывода исполняемых файлов в моем решении:
%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, чтобы отразить расположение файлов в окончательном установленном приложении.
Теперь, если я взгляну на свойства ссылок в Visual Studio IDE, я увижу, что «Путь» каждой ссылки является абсолютным и соответствует фактическому выходному местоположению сборки. Это понятно и правильно. Как и ожидалось, решение компилируется и работает нормально.
Чего я не понимаю, так это почему все работает, даже когда я закрываю IDE, переименовываю каталог [MyAppName] и запускаю [Client] EXE вручную? Как среда выполнения находит сборки, если ссылочные пути не совпадают с теми, что были во время компоновки?
Чтобы было ясно, это именно то, что мне нужно: полураспределенный набор файлов приложений, которые нормально работают независимо от того, где находится каталог [MyAppName] или даже от того, как он называется. Я просто хотел бы знать, как и почему это работает без какого-либо конкретного разрешения пути с моей стороны.
Я прочитал ответы на этот похожий вопрос, но все же не понимаю.
Помощь очень ценится!