Имена сборок
Обновлен: Ноябрь 2007
Имя сборки хранится в метаданных и в значительной степени влияет на ее область определения и использование в приложениях. Сборки со строгим именем имеют полное имя, в состав которого входит имя сборки, язык и региональные параметры, открытый ключ и номер версии. Оно часто называется отображаемым именем; у загружаемых сборок его можно получить через свойство 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. Имена закрытых сборок, развертываемых только в корневом каталоге приложения, могут отличаться от соответствующих файловых имен. |
См. также
Задачи
Практическое руководство. Определение полного имени сборки
Основные понятия
Обнаружение сборок в среде выполнения