В каком порядке выполняется поиск местоположений для загрузки библиотек DLL, на которые даны ссылки?
Вопрос
Я знаю, что .NET Framework ищет библиотеки DLL, на которые ссылаются ссылки, в нескольких местах
- Глобальный кэш сборок (GAC)
- Любые частные пути, добавленные в AppDomain
- Текущий каталог исполняемой сборки
В каком порядке производится поиск в этих местах?Прекращается ли поиск библиотеки DLL, если найдено совпадение, или он продолжается по всем расположениям (и если да, то как разрешаются конфликты)?
Также, пожалуйста, подтвердите или опровергните эти местоположения и укажите любые другие местоположения, которые я не упомянул.
Решение
Загрузка сборки - довольно сложный процесс, который зависит от множества различных факторов, таких как файлы конфигурации, политики издателя, настройки appdomain, хосты CLR, частичные или полные имена сборок и т.д.
Простая версия заключается в том, что сначала GAC, затем частные пути.%PATH% никогда не используется.
Лучше всего использовать Просмотр журнала привязки сборки (Fuslogvw.exe) для устранения любых проблем с загрузкой сборки.
Редактировать http://msdn.microsoft.com/en-us/library/aa720133.aspx объясняет этот процесс более подробно.
Другие советы
Я нашел статья ссылка на статью MSDN о Порядок поиска библиотеки DLL это говорит
Для управляемых зависимостей кода Глобальный кэш сборок всегда преобладает;локальная сборка в приложении каталог не будет выбран, если в GAC есть существующая (или более новая с политикой) копия.
Учитывая это, я предполагаю, что список MSDN верен с одним дополнением
0. Global assembly cache
"При загрузке DLL-файлов больше не выполняется поиск в текущем каталоге первым!Это изменение также было внесено в Windows XP с пакетом обновления 1.Поведение по умолчанию теперь заключается в том, чтобы сначала просмотреть все системные расположения, затем текущий каталог и, наконец, любые пользовательские пути ".
(исх. http://weblogs.asp.net/pwilson/archive/2003/06/24/9214.aspx)
Порядок serach по умолчанию, который может быть изменен приложением, также описан в MSDN: http://msdn.microsoft.com/en-us/library/ms682586.aspx