Беспорядок разрешения блока .NET

После прочтения статьи MSDN, Как Время выполнения Определяет местоположение блоков и также читающий это, я все еще не уверен в том, как слабо именованные блоки разрешены во времени выполнения.

Например, если у меня есть ссылка на некоторый dll файл в моем проекте, я компилирую и развертываюсь, это возьмет новую версию dll файла, на который ссылаются, если я просто заменю старый, на который на самом деле сослались во время компиляции? Имеет значение, если ссылка в файле проекта указывает версию и т.д. блока, на который ссылаются?

Любое приветствие просвещения

5
задан Community 23 May 2017 в 11:48
поделиться

4 ответа

Ответ на ваши вопросы - да, если у вас Конкретная версия установлена ​​на False в свойствах ссылки на сборку. .

0
ответ дан 15 December 2019 в 06:17
поделиться

Если сборка не найдена в GAC, то CLR будет искать ее в "пути зондирования". По умолчанию это только каталог, содержащий EXE. Он ищет только совпадение по имени сборки и прекращает поиск при первом совпадении.

Затем проверяется номер [AssemblyVersion]. Если он не совпадает, то вы получите исключение, он не будет продолжать поиск другой сборки с тем же именем. Всякий раз, когда у вас возникают проблемы с разрешением, вы захотите воспользоваться утилитой Fuslogvw.exe. Она покажет вам, где именно CLR искал и что пошло не так.

2
ответ дан 15 December 2019 в 06:17
поделиться

Лучшее место, где я нашел информацию об этом, находится в Grimes Fusion Workshop, который можно найти здесь. Он очень подробный и в то же время простой для понимания.

1
ответ дан 15 December 2019 в 06:17
поделиться

Если версия не указана, он подхватит ссылку, если версия указана, он попытается найти и загрузить сборку, соответствующую сигнатуре и указанной версии. если она не найдена, он выбросит исключение. Чтобы решить эту проблему, можно сделать перенаправление привязки сборки.

0
ответ дан 15 December 2019 в 06:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: