После прочтения статьи MSDN, Как Время выполнения Определяет местоположение блоков и также читающий это, я все еще не уверен в том, как слабо именованные блоки разрешены во времени выполнения.
Например, если у меня есть ссылка на некоторый dll файл в моем проекте, я компилирую и развертываюсь, это возьмет новую версию dll файла, на который ссылаются, если я просто заменю старый, на который на самом деле сослались во время компиляции? Имеет значение, если ссылка в файле проекта указывает версию и т.д. блока, на который ссылаются?
Любое приветствие просвещения
Ответ на ваши вопросы - да, если у вас Конкретная версия
установлена на False
в свойствах ссылки на сборку. .
Если сборка не найдена в GAC, то CLR будет искать ее в "пути зондирования". По умолчанию это только каталог, содержащий EXE. Он ищет только совпадение по имени сборки и прекращает поиск при первом совпадении.
Затем проверяется номер [AssemblyVersion]. Если он не совпадает, то вы получите исключение, он не будет продолжать поиск другой сборки с тем же именем. Всякий раз, когда у вас возникают проблемы с разрешением, вы захотите воспользоваться утилитой Fuslogvw.exe. Она покажет вам, где именно CLR искал и что пошло не так.
Лучшее место, где я нашел информацию об этом, находится в Grimes Fusion Workshop, который можно найти здесь. Он очень подробный и в то же время простой для понимания.
Если версия не указана, он подхватит ссылку, если версия указана, он попытается найти и загрузить сборку, соответствующую сигнатуре и указанной версии. если она не найдена, он выбросит исключение. Чтобы решить эту проблему, можно сделать перенаправление привязки сборки.