Имена сборок

Имя сборки хранится в метаданных и в значительной степени влияет на ее область определения и использование в приложениях. Сборки со строгим именем имеют полное имя, в состав которого входит имя сборки, язык и региональные параметры, открытый ключ и номер версии. Оно часто называется отображаемым именем; у загружаемых сборок его можно получить через свойство FullName.

Среда выполнения использует эти сведения для обнаружения сборки и для того, чтобы отличать данную сборку от других сборок с тем же именем. Например, имеющая строгое имя сборка myTypes может иметь следующее полное имя:

myTypes, Version=1.0.1234.0, Culture=en-US, PublicKeyToken=b77a5c561934e089c, ProcessorArchitecture=msil
ПримечаниеПримечание

Для поддержки сборок, привязанных к конкретным процессорам, в идентификации сборки в платформе .NET Framework версии 2.0 указывается архитектура процессора.Существует возможность создавать версии сборок, идентификации которых различаются только архитектурой процессора — например 32-разрядные и 64-разрядные версии.При строгом именовании указывать архитектуру процессора не требуется.Дополнительные сведения см. в разделе AssemblyName.ProcessorArchitecture.

В этом примере полное имя указывает, что у сборки myTypes имеется строгое имя с токеном общего ключа, значение языка и региональных параметров "Английский (США)" и номер версии 1.0.1234.0. Архитектурой процессора является "msil", что означает, что должна выполняться JIT-компиляция в 32- или 64-разрядный код в зависимости от операционной системы и процессора.

Код, запрашивающий типы в сборке, должен использовать полное имя сборки. Данный подход называется полной привязкой. Частичная привязка, при которой задается только имя самой сборки, при ссылке на сборки в платформе .NET Framework не допускается.

Все ссылки на сборки, составляющие .NET Framework, должны содержать полное имя сборки. Например, для ссылки на сборку System.Data в .NET Framework версии 1.0 необходимо использовать следующее имя:

System.data, version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

Обратите внимание, что версия соответствует номеру версии всех сборок .NET Framework, поставлявшихся с .NET Framework версии 1.0. Для сборок .NET Framework значение языка и региональных параметров всегда нейтрально, а открытый ключ совпадает с показанным в приведенном выше примере.

Например, при установке слушателя трассировки для добавления ссылки на сборку в файле конфигурации необходимо использовать полное имя системной сборки .NET Framework:

<add name="myListener" type="System.Diagnostics.TextWriterTraceListener, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" initializeData="c:\myListener.log" />
ПримечаниеПримечание

В ходе привязки среда выполнения не различает регистр в именах сборок, но при этом сохраняет его без изменений.Ряд средств Пакет средств разработки программного обеспечения (SDK) для Windows работает с именами сборок с учетом регистра.Оптимальным является такой порядок использования имен сборок, при котором они рассматриваются как регистрозависимые.

Правила именования компонентов приложений

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

Если, к примеру, сборка с именем myAssembly.exe ссылается на сборку с именем myAssembly.dll, то при вызове myAssembly.exe привязка пройдет корректно. Тем не менее, если другое приложение вызовет myAssembly.exe с помощью метода AppDomain.ExecuteAssembly, то при обработке запроса на привязку к сборке "myAssembly", поступившего от myAssembly.exe, среда выполнения определит, что сборка с именем "myAssembly" уже загружена. В этом случае сборка myAssembly.dll загружаться не будет. Поскольку запрашиваемый тип отсутствует в myAssembly.exe, то возникнет исключение TypeLoadException.

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

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

Если сборка со строгим именем помещается в глобальный кэш сборок, то имя файла сборки должно соответствовать имени сборки (без учета расширения файла — например .exe или .dll).Так, если имя файла сборки — myAssembly.dll, то именем сборки должно быть myAssembly.Имена закрытых сборок, развертываемых только в корневом каталоге приложения, могут отличаться от соответствующих файловых имен.

См. также

Задачи

Практическое руководство. Определение полного имени сборки

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

Создание сборок

Сборки со строгими именами

глобальный кэш сборок

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

Другие ресурсы

Программирование с использованием сборок