Поделиться через


Шаг 4. Обнаружение сборки с помощью базы кода или проверки

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

  1. Если элемент <codeBase> найден в файле конфигурации приложения, среда выполнения проверяет указанное местоположение. Если найдено совпадение, используется найденная сборка, и проверка не производится. Если сборка не найдена, происходит сбой запроса привязки.

  2. Среда выполнения осуществляет проверку наличия связанной сборки, используя правила, описанные далее в этом разделе.

ПримечаниеПримечание

Если в каталоге имеется несколько версий сборки и требуется сослаться на конкретную версию сборки, необходимо использовать элемент <codeBase> вместо атрибута privatePath элемента <probing>.Если используется элемент <probing>, среда выполнения останавливает проверку при первом обнаружении сборки, у которой совпадает упоминаемое в ссылке простое имя сборки независимо от того, является ли совпадение точным или нет.Если совпадение точное, найденная сборка используется.Если совпадение не является точным, проверка прекращается и привязка считается неудавшейся.

Обнаружение сборки с помощью базы кода

Сведения базы кода могут предоставляться с помощью элемента <codeBase> в файле конфигурации. Эта база кода всегда проверяется, перед тем как среда выполнения пытается начать проверку связанной сборки. Если файл политики издателя, содержащий переадресацию конечной версии, содержит также элемент <codeBase>, используется этот элемент <codeBase>. Например, если в файле конфигурации приложения указан элемент <codeBase>, и файл политики издателя, переопределяющий сведения приложения, также содержит элемент <codeBase>, используется элемент <codeBase> из файла политики издателя.

Если совпадение не найдено в местоположении, заданном элементом <codeBase>, запрос привязки завершается неудачей и никакие дополнительные действия не предпринимаются. Если среда выполнения определяет, что сборка соответствует критерию вызывающей сборки, то используется эта сборка. Когда загружается файл, указанный заданным элементом <codeBase>, среда выполнения проверяет совпадение имени, версии, языка, региональных параметров и открытого ключа с соответствующими параметрами ссылки вызывающей сборки.

ПримечаниеПримечание

Связанные сборки вне корневого каталога приложения должны иметь строгие имена и должны быть установлены в глобальном кэше сборок или заданы с помощью элемента <codeBase>.

Обнаружение сборки с помощью проверки

Если в файле конфигурации приложения нет элемента <codeBase>, среда выполнения проверяет наличие сборки, используя перечисляемые ниже четыре критерия:

  • Базовая папка приложения, являющаяся корневым каталогом, в котором выполняется приложение.

  • Язык и региональные параметры, являющиеся атрибутом региональных параметров сборки, на которую ссылаются.

  • Имя, являющееся именем связанной сборки.

  • Атрибут privatePath элемента <probing>, который является определяемым пользователем списком подкаталогов в корневой папке. Это местоположение может быть задано в файле конфигурации приложения и управляемом коде с помощью свойства AppendPrivatePath для домена приложения. При указании в управляемом коде путь privatePath управляемого кода проверяется первым, а за ним следует путь, задаваемый в файле конфигурации приложения.

Проверка базовой папки приложения и каталогов языков и региональных параметров

Среда выполнения всегда начинает проверку с базы приложения, которая может представлять собой либо URL-адрес, либо корневой каталог приложения на компьютере. Если связанная сборка не найдена в базовой папке приложения, и не предоставлены сведения о языке и региональных параметрах, среда выполнения осуществляет поиск во всех подкаталогах с именем сборки. В число проверяемых каталогов входят следующие:

   [базовая папка приложения] / [имя сборки].dll

   [базовая папка приложения] / [имя сборки] / [имя сборки].dll

Если для связанной сборки определены сведения о языке и региональных параметрах, проверяются только следующие каталоги:

   [базовая папка приложения] / [язык и региональные параметры] / [имя сборки].dll

   [базовая папка приложения] / [язык и региональные параметры] / [имя сборки] / [имя сборки].dll

Проверка с помощью атрибута privatePath

Помимо подкаталогов языков и региональных параметров и подкаталогов, называемых по связанной сборке, среда выполнения проверяет также каталоги, задаваемые с помощью атрибута privatePath элемента <probing>. Каталоги, задаваемые с помощью атрибута privatePath, должны быть подкаталогами корневого каталога приложения. Проверяемые каталоги зависят от того, включены ли сведения о языке и региональных параметрах в запрос связанной сборки.

Среда выполнения останавливает проверку при первом обнаружении сборки, для которой найдено совпадение с приведенным простым именем сборки независимо от того, является ли совпадение точным или нет. Если совпадение точное, найденная сборка используется. Если совпадение не является точным, проверка прекращается и привязка считается неудавшейся.

Если сведения о языке и региональных параметрах включены, проверяются следующие каталоги:

   [базовая папка приложения] / [binpath] / [язык и региональные параметры] / [имя сборки].dll

   [базовая папка приложения] / [binpath] / [язык и региональные параметры] / [имя сборки] / [имя сборки].dll

Если сведения о языке и региональных параметрах не включены, проверяются следующие каталоги:

   [базовая папка приложения] / [binpath] / [имя сборки].dll

   [базовая папка приложения] / [binpath] / [имя сборки] / [имя сборки].dll

Примеры проверки

Заданы следующие сведения:

  • Имя связанной сборки: myAssembly

  • Корневой каталог приложения: http://www.code.microsoft.com

  • Значение элемента <probing> в файле конфигурации: bin

  • Язык и региональные параметры: de

Среда выполнения проверяет следующие URL-адреса:

   http://www.code.microsoft.com/de/myAssembly.dll

   http://www.code.microsoft.com/de/myAssembly/myAssembly.dll

   http://www.code.microsoft.com/bin/de/myAssembly.dll

   http://www.code.microsoft.com/bin/de/myAssembly/myAssembly.dll

Несколько сборок с одинаковыми именами

В следующем примере демонстрируется настройка нескольких сборок с одинаковыми именами.

   <dependentAssembly>
      <assemblyIdentity name="Server" publicKeyToken="c0305c36380ba429" /> 
         <codeBase version="1.0.0.0" href="v1/Server.dll"/>
         <codeBase version="2.0.0.0" href="v2/Server.dll"/>
   </dependentAssembly>

Другие проверяемые местоположения

Местоположение сборки может быть также установлено с помощью контекста текущей привязки. Это чаще всего происходит, когда используется метод Assembly.LoadFrom, а также в сценариях COM-взаимодействия. Если сборка использует метод LoadFrom для ссылки на другую сборку, местоположение вызывающей сборки рассматривается как подсказка о месте, где искать связанную сборку. Если обнаружено совпадение, найденная сборка загружается. Если совпадение не обнаружено, среда выполнения продолжает поиск в соответствии с семантикой, а затем запрашивает установщик Windows о предоставлении сборки. Если не предоставлена сборка, соответствующая запросу привязки, выдается исключение. Это исключение равно исключению TypeLoadException в управляемом коде, если имелась ссылка на тип, или исключению FileNotFoundException, если загружаемая сборка не была найдена.

Например, если Assembly1 ссылается на Assembly2, и Assembly1 была загружена с веб-узла http://www.code.microsoft.com/utils, это местоположение рассматривается как подсказка о месте, где следует искать Assembly2.dll. Затем среда выполнения проверяет наличие сборки на веб-узлах http://www.code.microsoft.com/utils/Assembly2.dll и http://www.code.microsoft.com/utils/Assembly2/Assembly2.dll. Если Assembly2 не обнаружена в каком-либо из этих местоположений, среда выполнения запрашивает установщик Windows.

См. также

Основные понятия

Обнаружение сборок в среде выполнения

Шаг 1. Проверка файлов конфигурации

Шаг 2. Проверка наличия ранее связанных сборок

Шаг 3. Проверка глобального кэша сборок

Частичные ссылки на сборки