Сборка .Net разрешает путаницу - PullRequest
5 голосов
/ 04 июня 2010

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

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

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

Ответы [ 4 ]

2 голосов
/ 04 июня 2010

Если сборка не найдена в GAC, то CLR будет искать ее по «пути проверки». Который по умолчанию является только каталогом, который содержит EXE. Он ищет только совпадение в имени сборки и прекращает поиск при первом совпадении.

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

1 голос
/ 04 июня 2010

Лучшее место, о котором я узнал, это мастерская Grimes Fusion, которую можно найти здесь . Он очень всеобъемлющий, но в то же время простой для понимания.

0 голосов
/ 04 июня 2010

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

0 голосов
/ 04 июня 2010

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

...