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

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

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

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

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

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

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

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

EDIT http://msdn.microsoft.com/en-us/library/aa720133.aspx объясняет процесс более подробно.

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

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

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

  0. Глобальный сборный кеш 

«В настоящее время не загружается текущий каталог при загрузке DLL! Это изменение также было внесено в Windows XP с пакетом обновления 1. Поведение по умолчанию теперь состоит в том, чтобы сначала просмотреть все местоположения системы, затем текущий каталог и, наконец, любые пользовательские пути. “

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

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

  • Компиляция Visual Studio 2010 с версией отладки или выпуска сторонней библиотеки в зависимости от того, скомпилирован ли мой проект Build или Release?
  • Использовать Visual Studio 2012 и компилироваться со старым набором инструментов платформы?
  • DLL не может быть запущена для установщиков MSI
  • Ссылки DLL в Visual C ++
  • Объединить DLL в EXE?
  • .def файлы C / C ++ DLL
  • Msvcr71.dll отсутствует
  • Как вы регистрируете DLL-файл Win32 COM в WiX 3?
  • C # DllImport с булевой функцией C ++ не возвращается правильно
  • Попытка использовать DLL из Java (JNA). Невозможно загрузить исключение библиотеки
  • Как установить путь к DLL-файлу в Visual Studio?
  • Давайте будем гением компьютера.