Преобразование экспортированной сборки
Любое средство или API-интерфейс, выполняющие экспорт сборки в библиотеку типов, должны сначала преобразовать внешний уровень управляемой сборки. В процессе экспорта каждая отдельная сборка преобразуется в одну библиотеку типов, благодаря чему обеспечивается однозначная связь между сборкой и библиотекой типов. Сборка не может быть разбита на несколько библиотек типов. Преобразование сборки в библиотеку типов всегда дает одинаковый результат, независимо от деталей и способа преобразования.
Удостоверения сборки и библиотеки типов
Удостоверение сборки состоит из четырех элементов, перечисленных в следующей таблице.
Элемент |
Описание |
---|---|
Имя |
Строка, используемая для идентификации сборки. Обычно эта строка совпадает с именем файла сборки без расширения. |
Открытый ключ |
Открытая часть в паре криптографических ключей (открытый/закрытый). |
Версия |
Числовая строка, состоящая из четырех частей: основного номера, дополнительного номера, номера построения и номера редакции. |
Строка "Язык и региональные параметры". |
Поддерживаемый сборкой языковой стандарт. |
Сочетание этих полей образует строгое имя, идентифицирующее сборку.
Частичный манифест сборки
.assembly Sample as "Sample"
{
publickey = (00 24 00 00 04 80 00 00 94 00 00 00 06 02 00 00
00 24 00 00 52 53 41 31 00 04 00 00 01 00 01 00
B7 3C 60 FD 2D 6B E4 14 4E BD D1 B6 1A 09 FB F1
23 FF A8 62 59 B3 86 0B 0A 73 10 98 51 E5 0E D6
7E 10 2F A7 6E AF 1B E5 E8 F1 2E E6 9C F7 74 9A
1A 9A 83 88 2C 70 C9 8B 52 AD 97 5C 23 52 D2 42
D2 6C 64 14 E7 1D 1D 55 B4 F4 9C BB 86 7B 07 99
E3 19 E8 E1 4A BC 7A 40 A6 A2 9D AD 96 9B E5 CA
7C 10 5B 79 16 80 29 50 CD C3 63 D0 12 81 D0 18
B4 AE DA EC CC ED 8E AF A4 08 14 05 C6 9C 7B C5)
.ver 1:0:295:37445
.locale = (65 00 6E 00 2D 00 55 00 53 00 00 00 ) // en-US
}
Напротив, удостоверение библиотеки типов состоит из трех элементов: идентификатора библиотеки (LIBID), номера версии и локального идентификатора (LCID). Ни имя файла со сведениями о типах, ни понятное имя, определенное в библиотеке, не являются частью удостоверения сборки. Библиотеку типов можно найти с помощью реестра, используя LIBID, номер версии и LCID.
Представление библиотеки типов
[ uuid(0D26FC72-7EB1-4565-AA75-DA5F177EFA66),
lcid(0x0409),
version(2.1),
helpstring("Acme Widget Library")
]
library Acme
{
…
};
Идентификатор библиотеки (LIBID)
Когда процедура экспорта преобразует сборку в библиотеку типов, она сохраняет удостоверение библиотеки. Каждая уникально идентифицируемая сборка становится уникально идентифицируемой библиотекой типов. В целях обеспечения уникальности процедура преобразования использует из сборки для создания идентификатора LIBID имя, версию и открытый ключ.
В частности, использование этого сочетания дает следующие гарантии.
Сочетание имени, версии и открытого ключа всегда образует один и тот же идентификатор LIBID.
Две сборки с разным сочетанием имени, версии и открытого ключа никогда не образуют одинаковые идентификаторы LIBID.
С помощью атрибута GuidAttribute можно явным образом задать идентификатор LIBID.
Номер версии и построения
Процедура преобразования также передает сведения о версии из сборки в библиотеку типов, хотя номер версии в библиотеке типов состоит из двух частей, а номер версии в сборке — из четырех. Основной и дополнительный номера версии переносятся из сборки в библиотеку типов. Номер построения для сборки исключается во время преобразования — это означает, что результатом преобразования двух сборок, отличающихся только номерами построения, будет одна и та же библиотека типов. Сборки с номером 0, представляющим собой старший и младший номера (0.0.X.X), производят библиотеку типов с номером версии 1.0.
Обычно нельзя дать никаких гарантий касательно содержимого библиотек типов, созданных из нескольких версий сборки. Если тип определен в версии 1.0 библиотеки, его присутствие во второй версии той же библиотеки не гарантировано.
Сведения о языковом стандарте
Строка сборки, идентифицирующая языковой стандарт (например us-en), преобразуется в идентификатор LCID и сохраняется в поле LCID библиотеки типов. Если в сборке отсутствует строка, идентифицирующая языковой стандарт, процедура экспорта задает для LCID значение 0.
Точки и подчеркивания
Имена сборок нередко содержат точки, использование которых в именах библиотек типов не допускается. Процедура экспорта преобразует точки, содержащиеся в поле имени сборки, в подчеркивания.
Строки справки
Процедура экспорта копирует атрибут AssemblyDescriptionAttribute, если он применен к сборке во время разработки, в строку справки или свойство DocString, связанной с библиотекой типов. В библиотеке типов не заданы ни поле HelpFile, ни поле HelpContext. В библиотеке типов не задается ни один из флагов LIBFLAGS.
Другие поля сборки
Другие поля сборки, например Processor, OSInformation, CodeBase, Alias, AssemblyHash, Configuration и Flags, не экспортируются при выполнении преобразования.
Процедура преобразования не задает атрибуты библиотеки типов, такие как hidden, restricted и control.
См. также
Основные понятия
Преобразование экспортированного модуля
Преобразование экспортированного типа
Преобразование экспортированных членов
Преобразование экспортированного параметра