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


Имена сборок

Обновлен: Ноябрь 2007

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

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

myTypes, Version=1.0.1234.0, Culture=en-US, PublicKeyToken=b77a5c561934e089c, ProcessorArchitecture=msil
k8xx4k69.alert_note(ru-ru,VS.90).gifПримечание.

Для поддержки сборок, привязанных к конкретным процессорам, в идентификации сборки в платформе .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" />
k8xx4k69.alert_note(ru-ru,VS.90).gifПримечание.

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

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

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

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

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

k8xx4k69.alert_note(ru-ru,VS.90).gifПримечание.

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

См. также

Задачи

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

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

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

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

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

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

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

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