Подтвердить что ты не робот

Как предотвратить приложение .NET из загрузки/ссылки на сборку из GAC?

Могу ли я настроить приложение .NET таким образом (настройки в Visual Studio), что он ссылается на "локальную" сборку (не в GAC) вместо сборки в GAC, хотя обе сборки имеют одно и то же имя и одну и ту же версию?

4b9b3361

Ответ 1

Если обе сборки имеют сильные имена (подписанные), CLR всегда будет загружаться из GAC.

Ниже приведены шаги, которые использует среда выполнения для разрешения ссылок на сборку (из Как Runtime Locates Assemblies):

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

  • Проверяет, связано ли имя сборки до и, если да, использует ранее загруженную сборку. Если предыдущий запрос на загрузку сбои сбоя, запрос не выполнен немедленно, не пытаясь загрузить Ассамблея.

  • Проверяет глобальный кеш сборки. Если узел найден там, среда выполнения использует эту сборку.

  • Зонды для сборки (... некоторые материалы опущены...)

Как указано позже в той же статье:

Нет проверки версий для сборок без сильных имен, а также время выполнения проверьте глобальный кеш сборки для сборок без сильных имен.

Итак, если вы можете позволить себе удалить подпись из локальной сборки, приложение будет использовать ее вместо той, что находится в GAC.

Более подробно, чем вы, возможно, когда-либо захотите о механизмах привязки времени выполнения, см. блог Suzanne Cook.

Эта запись в блоге от Scott Hanselman также дает отличный обзор процесса привязки.

Ответ 3

Если вы можете изменить номер версии локальной dll, вы можете использовать перенаправление версии dll, используя атрибут oldVersion. Вы можете использовать сильное имя для локальной сборки: Посмотрите эту страницу: http://msdn.microsoft.com/en-us/library/7wd6ex19.aspx

Также вы должны учитывать, что можно изменить номер версии скомпилированной сборки, как описано здесь: Изменить версию сборки в сборке .NET.

Ответ 4

Чтобы успешно развернуть ваше приложение .NET Framework, вы должны понять, как среда выполнения обычного языка находит и связывает сборки, составляющие ваше приложение. По умолчанию среда выполнения пытается связать с точной версией сборки, с которой было создано приложение. Это поведение по умолчанию может быть переопределено настройками файла конфигурации.

Вы можете просмотреть информацию о привязке в файле журнала с помощью средства просмотра привязки журнала сборки (Fuslogvw.exe), которое входит в комплект разработки программного обеспечения Windows (SDK).

s