Имена сборокAssembly Names

Имя сборки хранится в метаданных и в значительной степени влияет на ее область определения и использование в приложениях.An assembly's name is stored in metadata and has a significant impact on the assembly's scope and use by an application. Сборки со строгим именем имеют полное имя, в состав которого входит имя сборки, язык и региональные параметры, открытый ключ и номер версии.A strong-named assembly has a fully qualified name that includes the assembly's name, culture, public key, and version number. Оно часто называется отображаемым именем; у загружаемых сборок его можно получить через свойство FullName.This is frequently referred to as the display name, and for loaded assemblies can be obtained by using the FullName property.

Среда выполнения использует эти сведения для обнаружения сборки и для того, чтобы отличать данную сборку от других сборок с тем же именем.The runtime uses this information to locate the assembly and differentiate it from other assemblies with the same name. Например, сборка со строгим именем myTypes может иметь следующее полное имя:For example, a strong-named assembly called myTypes could have the following fully qualified name:

myTypes, Version=1.0.1234.0, Culture=en-US, PublicKeyToken=b77a5c561934e089c, ProcessorArchitecture=msil  

Примечание

Для поддержки сборок, привязанных к конкретным процессорам, в идентификации сборки в платформе .NET Framework версии 2.0 указывается архитектура процессора.Processor architecture is added to the assembly identity in the .NET Framework version 2.0, to allow processor-specific versions of assemblies. Можно создавать версии сборок, идентификации которых различаются только архитектурой процессора — например 32-разрядные и 64-разрядные версии.You can create versions of an assembly whose identity differs only by processor architecture, for example 32-bit and 64-bit processor-specific versions. При строгом именовании указывать архитектуру процессора не требуется.Processor architecture is not required for strong names. Дополнительные сведения можно найти по адресу: AssemblyName.ProcessorArchitecture.For more information, see AssemblyName.ProcessorArchitecture.

В этом примере полное имя указывает, что у сборки myTypes имеется строгое имя с маркером общего ключа, значение языка и региональных параметров "Английский (США)" и номер версии 1.0.1234.0.In this example, the fully qualified name indicates that the myTypes assembly has a strong name with a public key token, has the culture value for US English, and has a version number of 1.0.1234.0. Архитектурой процессора является "msil", что означает, что должна выполняться JIT-компиляция в 32- или 64-разрядный код в зависимости от операционной системы и процессора.Its processor architecture is "msil", which means that it will be just-in-time (JIT)-compiled to 32-bit code or 64-bit code depending on the operating system and processor.

Код, запрашивающий типы в сборке, должен использовать полное имя сборки.Code that requests types in an assembly must use a fully qualified assembly name. Данный подход называется полной привязкой.This is called fully qualified binding. Частичная привязка, при которой задается только имя самой сборки, при ссылке на сборки в платформе .NET Framework не допускается.Partial binding, which specifies only an assembly name, is not permitted when referencing assemblies in the .NET Framework.

Все ссылки на сборки, составляющие .NET Framework, должны содержать полное имя сборки.All assembly references to assemblies that make up the .NET Framework also must contain a fully qualified name of the assembly. Например, для ссылки на сборку System.Data в .NET Framework версии 1.0 необходимо использовать следующее имя:For example, to reference the System.Data .NET Framework assembly for version 1.0 would include:

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

Обратите внимание, что версия соответствует номеру версии всех сборок .NET Framework, поставлявшихся с .NET Framework версии 1.0.Note that the version corresponds to the version number of all .NET Framework assemblies that shipped with .NET Framework version 1.0. Для сборок .NET Framework значение языка и региональных параметров всегда нейтрально, а открытый ключ совпадает с показанным в приведенном выше примере.For .NET Framework assemblies, the culture value is always neutral, and the public key is the same as shown in the above example.

Например, при установке слушателя трассировки для добавления ссылки на сборку в файле конфигурации необходимо использовать полное имя системной сборки .NET Framework:For example, to add an assembly reference in a configuration file to set up a trace listener, you would include the fully qualified name of the system .NET Framework assembly:

<add name="myListener" type="System.Diagnostics.TextWriterTraceListener, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" initializeData="c:\myListener.log" />  

Примечание

В ходе привязки среда выполнения не различает регистр в именах сборок, но при этом сохраняет его без изменений.The runtime treats assembly names as case-insensitive when binding to an assembly, but preserves whatever case is used in an assembly name. Некоторые средства Windows SDK работают с именами сборок с учетом регистра.Several tools in the Windows SDK handle assembly names as case-sensitive. Оптимальным является такой порядок использования имен сборок, при котором они рассматриваются как регистрозависимые.For best results, manage assembly names as though they were case-sensitive.

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

При определении идентификации сборки среда выполнения не учитывает имя файла.The runtime does not consider the file name when determining an assembly's identity. Удостоверение сборки, которое состоит из ее имени, версии, языка и региональных параметров, а также строгого имени, должно восприниматься средой выполнения однозначно.The assembly identity, which consists of the assembly name, version, culture, and strong name, must be clear to the runtime.

Если, к примеру, сборка с именем myAssembly.exe ссылается на сборку с именем myAssembly.dll, то при вызове myAssembly.exe привязка пройдет корректно.For example, if you have an assembly called myAssembly.exe that references an assembly called myAssembly.dll, binding occurs correctly if you execute myAssembly.exe. Тем не менее, если другое приложение вызовет myAssembly.exe с помощью метода AppDomain.ExecuteAssembly, при обработке запроса на привязку к сборке "myAssembly", поступившего от myAssembly.exe, среда выполнения определит, что сборка с именем "myAssembly" уже загружена.However, if another application executes myAssembly.exe using the method AppDomain.ExecuteAssembly, the runtime determines that "myAssembly" is already loaded when myAssembly.exe requests binding to "myAssembly." В этом случае сборка myAssembly.dll загружаться не будет.In this case, myAssembly.dll is never loaded. Так как запрашиваемый тип отсутствует в myAssembly.exe, то возникнет исключение TypeLoadException.Because myAssembly.exe does not contain the requested type, a TypeLoadException occurs.

Во избежание этой проблемы необходимо следить за тем, чтобы сборки, составляющие приложение, имели разные имена, а сборки с одинаковыми именами располагались бы в разных каталогах.To avoid this problem, make sure the assemblies that make up your application do not have the same assembly name or place assemblies with the same name in different directories.

Примечание

Если сборка со строгим именем помещается в глобальный кэш сборок, то имя файла сборки должно соответствовать имени сборки (без учета расширения файла — например EXE или DLL).If you put a strong-named assembly in the global assembly cache, the assembly's file name must match the assembly name (not including the file name extension, such as .exe or .dll). Так, если имя файла сборки — myAssembly.dll, то именем сборки должно быть myAssembly.For example, if the file name of an assembly is myAssembly.dll, the assembly name must be myAssembly. Имена закрытых сборок, развертываемых только в корневом каталоге приложения, могут отличаться от соответствующих файловых имен.Private assemblies deployed only in the root application directory can have an assembly name that is different from the file name.

См. такжеSee also