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

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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
53
0
36 761
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

(ref. http://weblogs.asp.net/pwilson/archive/2003/06/24/9214.aspx)

The default serach order, which can be changed by the application, is also described on MSDN: http://msdn.microsoft.com/en-us/library/ms682586.aspx

Кажется, это зависит от загрузки обычной Dll, а не сборки .net.

Tanerax 08.09.2008 19:55

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

For managed code dependencies, the Global Assembly Cache always prevails; the local assembly in application directory will not be picked up if there is an existing (or newer with policy) copy in the GAC.

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

0. Global assembly cache

статьи больше не существует, поэтому мы понятия не имеем, что остальная часть списка основана на вашем ответе

Blub 05.11.2014 08:18

На моем конце все ссылки в порядке.

Anthony Mastrean 16.12.2015 22:45
Ответ принят как подходящий

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

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

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

РЕДАКТИРОВАТЬhttp://msdn.microsoft.com/en-us/library/aa720133.aspx объясняет процесс более подробно.

У меня нет реальных проблем с загрузкой сборки. Я пытаюсь понять порядок поиска / загрузки с академической точки зрения.

Anthony Mastrean 08.09.2008 20:12

И вы правы насчет "% path%" ... Я ошибся, когда работал с вызовами p / invoke (я использовал "% path%", чтобы упростить использование "DllImportAttribute").

Anthony Mastrean 08.09.2008 20:14

Если .net dll ссылается на родную dll, пути могут быть использованы

rerun 13.07.2013 03:22

Другие вопросы по теме