Преобразование экспортированной сборки

Любое средство или 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.

См. также

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

Преобразование экспортированного модуля

Преобразование экспортированного типа

Преобразование экспортированных членов

Преобразование экспортированного параметра

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

Резюме преобразования сборки в библиотеку типов