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

В каком порядке размещаются местоположения для загрузки ссылочных библиотек DLL?

Я знаю, что платформа .NET ищет ссылки на DLL в нескольких местах

  • Глобальный кеш сборки (GAC)
  • Любые частные пути, добавленные в AppDomain
  • Текущий каталог исполняющей сборки

В каком порядке находятся эти места? Является ли поиск DLL прекращенным, если совпадение найдено или оно продолжается во всех местах (и если да, то как конфликты разрешены)?

Кроме того, пожалуйста, подтвердите или отклоните эти местоположения и укажите в других местах, о которых я не упоминал.

4b9b3361

Ответ 1

Загрузка сборки - довольно сложный процесс, который зависит от множества различных факторов, таких как файлы конфигурации, политики издателя, настройки домена приложения, хосты CLR, частичные или полные имена сборок и т.д.

Простая версия состоит в том, что сначала GAC, затем частные пути. % PATH% никогда не используется.

Лучше всего использовать Assembly Binding Log Viewer (Fuslogvw.exe) для отладки любых проблем с загрузкой сборки.

ИЗМЕНИТЬ http://msdn.microsoft.com/en-us/library/aa720133.aspx объясняет процесс более подробно.

Ответ 2

Я нашел статью, ссылающуюся на статью MSDN на порядок поиска DLL, который говорит

Для зависимостей управляемого кода, Глобальный сборный кэш всегда преобладает; локальная сборка в приложении каталог не будет поднят, если существует (или новее с политики) в GAC.

Учитывая это, я думаю, что список MSDN верен с одним добавлением

0. Global assembly cache

Ответ 3

"Больше не является текущим каталогом, который был сначала обнаружен при загрузке DLL! Это изменение также было внесено в Windows XP SP1. Поведение по умолчанию в настоящее время состоит в том, чтобы сначала просмотреть все местоположения системы, затем текущий каталог и, наконец, определенных путей."

(ссылка http://weblogs.asp.net/pwilson/archive/2003/06/24/9214.aspx)

Заказ по умолчанию, который может быть изменен приложением, также описан в MSDN: http://msdn.microsoft.com/en-us/library/ms682586.aspx