Манифесты сборки

Манифест сборки — это XML-файл, описывающий параллельную сборку. Манифесты сборок описывают имена и версии параллельных сборок, файлов и ресурсов сборки, а также зависимость сборки от других параллельных сборок. Для правильной установки, активации и выполнения параллельных сборок требуется, чтобы манифест сборки всегда сопровождал сборку в системе.

Полный список XML-схемы см. в разделе "Схема файла манифеста".

Манифесты сборки имеют следующие элементы и атрибуты.

Элемент Атрибуты Обязательно
Сборки Да
manifestVersion Да
noInheritable нет
assemblyIdentity Да
type Да
name Да
language нет
processorArchitecture нет
version Да
Publickeytoken нет
Зависимостей нет
dependentAssembly нет
файл нет
name Да
hashalg нет
hash нет
comClass Нет
Описание нет
Clsid Да
threadingModel нет
tlbid нет
Progid нет
miscStatus нет
miscStatusIcon нет
miscStatusContent нет
miscStatusDocPrint нет
miscStatusDocPrint нет
Typelib нет
tlbid Да
version Да
helpdir Да
resourceid нет
flags нет
comInterfaceExternalProxyStub нет
Iid Да
baseInterface нет
numMethods нет
name нет
tlbid нет
proxyStubClsid32 нет
comInterfaceProxyStub нет
Iid Да
name Да
tlbid нет
baseInterface нет
numMethods нет
proxyStubClsid32 нет
threadingModel нет
windowClass нет
Версии нет

Расположение файла

Манифесты сборок можно установить в трех расположениях:

  • В качестве манифестов, сопровождающих общие сборки, манифесты сборок должны быть установлены в виде отдельного файла в параллельном кэше сборок. Обычно это папка WinSxS в каталоге Windows.
  • Как манифесты, сопровождающие частные сборки, манифесты сборок должны быть установлены в структуре каталогов приложения. Обычно это отдельный файл в той же папке, что и исполняемый файл приложения.
  • В качестве ресурса в библиотеке DLL сборка доступна для частного использования библиотеки DLL. Манифест сборки не может быть включен в качестве ресурса в EXE-файле. EXE-файл может включать манифест приложения в качестве ресурса.

Синтаксис имени файла

Имя манифеста сборки — это любое допустимое имя файла, за которым следует МАНИФЕСТ.

Например, манифест сборки, ссылающийся на myassembly, будет использовать следующий синтаксис имени файла. Поле идентификатора> ресурса можно опустить<, если манифест сборки устанавливается в виде отдельного файла или если идентификатор ресурса равен 1.

myassembly.\

Примечание

Из-за параллельного поиска частных сборок при упаковке библиотеки DLL в качестве частной сборки применяются следующие ограничения именования. Рекомендуемый способ сделать это — поместить манифест сборки в библиотеку DLL в качестве ресурса. В этом случае идентификатор ресурса должен иметь значение 1, а имя частной сборки может совпадать с именем библиотеки DLL. Например, если имя библиотеки DLL Microsoft.Windows.mysample.dll, значение атрибута имени, используемого в элементе assemblyIdentity манифеста, также может быть корпорацией Майкрософт. Windows.mysample. Альтернативным способом является размещение манифеста сборки в отдельном файле. В этом случае имя сборки и ее манифеста должно отличаться от имени библиотеки DLL. Например, корпорация Майкрософт. Windows.mysampleAsm, Майкрософт. Windows.mysampleAsm.manifest и Microsoft.Windows.Mysample.dll. Дополнительные сведения о параллельном поиске частных сборок см. в разделе "Последовательность поиска сборок".

Элементы

Имена элементов и атрибутов чувствительны к регистру. Значения элементов и атрибутов не учитывают регистр, за исключением значения атрибута типа.

Сборки

Элемент контейнера. Его первый подэлемент должен быть элементом assemblyIdentity или noInheritable . Манифест сборки однозначно описывает параллельную сборку, определяемую идентификатором assemblyIdentity. Обязательный.

Элемент сборки должен находиться в пространстве имен urn:schemas-microsoft-com:asm.v1. Дочерние элементы сборки также должны находиться в этом пространстве имен путем наследования или путем добавления тегов.

Элемент сборки имеет следующий атрибут.

attribute Описание
manifestVersion Атрибут manifestVersion должен иметь значение 1.0.

noInheritable

Включите этот элемент в манифест сборки, чтобы указать, что сборка управляет контекстами активации и ее объектами . Элемент noInheritable должен быть подэлементом элемента сборки . Элемент assemblyIdentity должен поступать после любого элемента noInheritable . Элемент noInheritable требуется в манифесте сборки, если сборка используется любыми манифестами приложения , включающими элемент noInherit . Элемент noInheritable в манифесте приложения не действует. Элемент noInheritable не содержит дочерних элементов.

assemblyIdentity

Описывает и уникально идентифицирует параллельную сборку.

В качестве первого подэлемента элемента сборкиassemblyIdentity описывает и однозначно идентифицирует параллельную сборку, которая владеет этим манифестом сборки. Это называется def-context assemblyIdentity манифеста сборки.

Как первый подэлемент зависимого элементаAssembly, assemblyIdentity описывает и однозначно идентифицирует параллельную сборку, используемую атрибутом assemblyIdentity DEF-контекста. Это называется REF-context assemblyIdentity манифеста сборки. Сборка DEF-context требует правильной работы сборки контекста REF. Обратите внимание, что каждая сборка REF-context AssemblyIdentity должна точно соответствовать соответствующей сборке DEF-contextIdentity в собственном манифесте сборки, на которую ссылается ссылка.

Этот элемент не имеет подэлементов. Элемент assemblyIdentity имеет следующие атрибуты.

attribute Описание
type Указывает тип сборки. Значение должно быть win32 и в нижнем регистре. Обязательный.
name Уникальное имя сборки. Используйте следующий формат для имени сборки: Organization.Division.Name. Например, корпорация Майкрософт. Windows.mysampleAsm. Обязательный. Обратите внимание, что в случае библиотеки DLL, упаковаемой в виде частной сборки с отдельным файлом манифеста, имя сборки должно отличаться от имени библиотеки DLL и манифеста.
language Определяет язык сборки. Необязательный элемент. Если сборка зависит от языка, укажите код языка DHTML. В атрибуте DEF-context assemblyIdentity манифеста сборки, предназначенного для использования во всем мире (нейтралитета языка), опустите атрибут языка.
В REF-context assemblyIdentity манифеста сборки, предназначенного для всемирного использования (нейтрального языка), задайте для языка значение "*".
processorArchitecture Указывает процессор. Допустимые значения: x86 для 32-разрядных Windows и ia64 для 64-разрядных Windows. Необязательный элемент.
version Указывает версию сборки. Используйте формат версии из четырех частей: mmmmm.nnnnn.pdfoo.ppppp. Каждая часть, разделенная точками, может составлять от 0 до 65535 включительно. Дополнительные сведения см. в разделе "Версии сборок". Обязательный.
Publickeytoken Шестнадцатеричная строка длиной 16 символов, представляющая последние 8 байт хэша SHA-1 открытого ключа, под которым подписана сборка. Открытый ключ, используемый для подписи каталога, должен иметь значение 2048 бит или больше. Требуется для совместно используемых параллельных сборок.

Зависимостей

Элемент контейнера, включающий по крайней мере один зависимыйAssembly. Первый подэлемент должен быть элементом dependentAssembly . Зависимость не имеет атрибутов. Необязательный элемент.

dependentAssembly

Первый подэлемент должен быть элементом assemblyIdentity , который описывает и однозначно идентифицирует параллельную сборку, которая используется параллельной сборкой, которая владеет этим манифестом сборки. Каждый зависимыйAssembly должен находиться в пределах одной зависимости. Необязательный элемент.

Файл

Содержит файлы, используемые параллельной сборкой. Содержит подэлементы comClass, typelib, windowClass, comInterfaceProxyStub . Необязательный элемент.

Элемент file имеет следующие атрибуты.

attribute Описание
name Имя файла, например Conctl32.dll.
hashalg Алгоритм, используемый для создания хэша файла. Это значение должно быть SHA1.
hash Хэш файла, на который ссылается имя. Шестнадцатеричная строка длины в зависимости от хэш-алгоритма.

comClass

Подэлемент элемента файла . Необязательный элемент.

Элемент comClass имеет следующие атрибуты.

attribute Описание
description Имя класса.
Clsid GUID, однозначно определяющий класс. Обязательный. Значение должно быть в формате допустимого GUID.
threadingModel Модель потоков, используемая внутрипроцессными классами COM. Если это свойство имеет значение NULL, модель потоков не используется. Компонент создается в основном потоке клиента, а вызовы из других потоков маршалируются в этот поток. Необязательный элемент. Допустимые значения: "Apartment", "Free", "Both" и "Neutral".
tlbid GUID для библиотеки типов для этого com-компонента. Значение должно быть в формате GUID. Необязательный элемент.
Progid Программный идентификатор, зависящий от версии, связанный с компонентом COM. Формат ProgID — <поставщик>.<компонент>.<версия>.
miscStatus Дублирует данные в манифесте сборки, предоставленные разделом реестра MiscStatus. Если значения для атрибутов miscStatusIcon, miscStatusContent, miscStatusDocprint или miscStatusThumbnail не найдены, для отсутствующих атрибутов используется соответствующее значение по умолчанию, указанное в miscStatus . Значением может быть разделенный запятыми список значений атрибутов из приведенной ниже таблицы. Этот атрибут можно использовать, если com-класс является классом OCX, требующим значений разделов реестра Miscstatus.
miscStatusIcon Дублирует данные в манифесте сборки, предоставляемые DVASPECT_ICON. Он может предоставить значок объекта. Значением может быть разделенный запятыми список значений атрибутов из приведенной ниже таблицы. Этот атрибут можно использовать, если com-класс является классом OCX, требующим значений разделов реестра Miscstatus.
miscStatusContent Дублирует данные в манифесте сборки, предоставляемые DVASPECT_CONTENT. Он может предоставлять составной документ для экрана или принтера. Значением может быть разделенный запятыми список значений атрибутов из приведенной ниже таблицы. Этот атрибут можно использовать, если com-класс является классом OCX, требующим значений разделов реестра Miscstatus.
miscStatusDocprint Дублирует данные в манифесте сборки, предоставленные DVASPECT_DOCPRINT. Он может предоставить представление объекта, отображаемое на экране, как будто напечатано на принтере. Значением может быть разделенный запятыми список значений атрибутов из приведенной ниже таблицы. Этот атрибут можно использовать, если com-класс является классом OCX, требующим значений разделов реестра Miscstatus.
miscStatusThumbnail Дублирует данные в манифесте сборки, предоставляемые DVASPECT_THUMBNAIL. Он может предоставить эскиз объекта, отображаемого в средстве просмотра. Значением может быть разделенный запятыми список значений атрибутов из приведенной ниже таблицы. Этот атрибут можно использовать, если com-класс является классом OCX, требующим значений разделов реестра Miscstatus.

Элемент comClass может иметь <элементы progid>... в виде дочерних элементов, которые перечисляют зависимые от версии progids.

В следующем примере показан элемент comClass , включенный в файловый элемент.

<file name="sampleu.dll">
        <comClass description="Font Property Page"
    clsid="{0BE35200-8F91-11CE-9DE3-00AA004BB851}"
          threadingModel = "Both"
             tlbid = "{44EC0535-400F-11D0-9DCD-00A0C90391D3}"/>
        <comClass description="Color Property Page"
    clsid="{0BE35201-8F91-11CE-9DE3-00AA004BB851}" 
    progid="ABC.Registrar"/>
    </file>

Если класс COM является классом OCX, которому требуется подраздел реестра MiscStatus, чтобы указать способ создания и отображения объекта, можно включить этот объект путем дублирования этих сведений в манифесте сборки. Укажите характеристики объекта с помощью атрибутов miscStatus, miscStatusIcon, miscStatusContent, miscStatusDocprint и miscStatusThumbnail элемента comClass . Задайте для этих атрибутов список значений атрибутов, разделенных запятыми, из следующей таблицы. Эти атрибуты дублируют сведения, предоставляемые перечислением DVASPECT. Если значение для miscStatusIcon, miscStatusContent, miscStatusDocprint или miscStatusThumbnail не найдено, используются значения по умолчанию, указанные в miscStatus . Используйте значения атрибутов из следующей таблицы. Они соответствуют битовых флагам перечисления OLEMISC .

Значение атрибута Константа OLEMISC
recomposeonresize OLEMISC_RECOMPOSEONRESIZE
onlyiconic OLEMISC_ONLYICONIC
insertnotreplace OLEMISC_INSERTNOTREPLACE
static OLEMISC_STATIC
cantlinkinside OLEMISC_CANTLINKINSIDE
canlinkbyole1 OLEMISC_CANLINKBYOLE1
islinkobject OLEMISC_ISLINKOBJECT
insideout OLEMISC_INSIDEOUT
activatewhenvisible OLEMISC_ACTIVATEWHENVISIBLE
renderingisdeviceindependent OLEMISC_RENDERINGISDEVICEINDEPENDENT
invisibleatruntime OLEMISC_INVISIBLEATRUNTIME
alwaysrun OLEMISC_ALWAYSRUN
actslikebutton OLEMISC_ACTSLIKEBUTTON
actslikelabel OLEMISC_ACTSLIKELABEL
nouiactivate OLEMISC_NOUIACTIVATE
Выравнивание OLEMISC_ALIGNABLE
simpleframe OLEMISC_SIMPLEFRAME
setclientsitefirst OLEMISC_SETCLIENTSITEFIRST
imemode TOLEMISC_IMEMODE
ignoreativatewhenvisible OLEMISC_IGNOREACTIVATEWHENVISIBLE
wantstomenumerge OLEMISC_WANTSTOMENUMERGE
supportsmultilevelundo OLEMISC_SUPPORTSMULTILEVELUNDO

Typelib

Подэлемент элемента файла . Необязательный элемент.

Элемент typelib содержит атрибуты, показанные в следующей таблице.

attribute Описание
tlbid Уникальный идентификатор библиотеки типов. Обязательный.
version Номер двух частей версии библиотеки типов. Если увеличивается только дополнительный номер версии, все функции предыдущей библиотеки типов поддерживаются совместимым способом. Если номер основной версии изменяется, необходимо перекомпилировать код, скомпилированный в библиотеке типов. Номер версии библиотеки типов может отличаться от номера версии приложения. Обязательный.
helpdir Каталог, в котором находится файл справки для типов в библиотеке типов. Если приложение поддерживает библиотеки типов для нескольких языков, библиотеки могут ссылаться на разные имена файлов в каталоге файлов справки. Если значение отсутствует, укажите "". Обязательный.
resourceid Шестнадцатеричное строковое представление идентификатора языкового стандарта (LCID). Это от четырех шестнадцатеричных цифр без префикса 0x и без начальных нулей. Идентификатор LCID может иметь нейтральный идентификатор подлангуа. Дополнительные сведения см. в разделе "Идентификаторы языкового стандарта". Необязательный элемент.
flags Строковое представление флагов библиотеки типов для этой библиотеки типов. В частности, он должен быть одним из "RESTRICTED", "CONTROL", "HIDDEN" и "HASDISKIMAGE". Это значения перечисления LIBFLAGS и те же флаги, указанные в параметре uLibFlags метода ICreateTypeLib::SetLibFlags . Необязательный элемент.

В следующем примере показан элемент typelib , включенный в файловый элемент.

<file name="sampleu.dll">
       <typelib tlbid="{44EC0535-400F-11D0-9DCD-00A0C90391D3}"
       version="1.0" helpdir=""/>
</file>

comInterfaceExternalProxyStub

ComInterfaceExternalProxyStub является подэлементом элемента сборки и используется для интерфейсов автоматизации. Например, IDispatch и его производные интерфейсы. Необязательный элемент.

Реализация прокси-заглушки по умолчанию подходит для большинства интерфейсов автоматизации, таких как интерфейсы, производные от IDispatch. Заглушка прокси-интерфейса интерфейса и все другие внешние реализации интерфейса-заглушки прокси-сервера должны быть перечислены в comInterfaceExternalProxyStub. Элемент comInterfaceExternalProxyStub содержит атрибуты, показанные в следующей таблице.

attribute Описание
Iid IID интерфейса, для которого объявляется прокси-сервер. Обязательный. Значение должно быть в формате "{iid}".
baseInterface IID интерфейса, от которого является производный атрибут iid . Этот атрибут является необязательным. Значение должно быть в формате "{iid}".
numMethods Количество методов, реализованных интерфейсом. Этот атрибут является необязательным. Значение должно быть в формате "n".
name Имя интерфейса, как показано в коде. Например, "IViewObject". Это не должно быть описательной строкой. Этот атрибут является необязательным. Значение должно быть в формате "name".
tlbid Библиотека типов, содержащая описание интерфейса, заданного атрибутом IID . Этот атрибут является необязательным. Значение должно быть в формате "{tlbid}".
proxyStubClsid32 Карты идентификатор CLSID в 32-разрядных библиотеках DLL прокси-сервера.

В следующем примере показан элемент comInterfaceExternalProxyStub .

<comInterfaceExternalProxyStub 
  name="IAxWinAmbientDispatch" 
    iid="{B6EA2051-048A-11D1-82B9-00C04FB9942E}" 
    numMethods="35" 
  baseInterface="{00000000-0000-0000-C000-000000000046}"/>

comInterfaceProxyStub

Подэлемент элемента файла . Необязательный элемент.

Если файл в сборке реализует заглушку прокси-сервера, соответствующий тег файла должен содержать подэлемент comInterfaceProxyStub с атрибутами, идентичными элементу comInterfaceProxyStub . Маршалинг интерфейсов между процессами и потоками может не работать должным образом, если не указать некоторые зависимости comInterfaceProxyStub для компонента.

Элемент comInterfaceProxyStub имеет следующие атрибуты.

attribute Описание
Iid Teh. IID интерфейса, для которого объявляется прокси-сервер. Обязательный. Значение должно быть в формате "{iid}".
name Имя интерфейса, отображаемого в коде. Например, "IViewObject". Это не должно быть описательной строкой. Этот атрибут является необязательным. Значение должно быть в формате "name".
tlbid Библиотека типов, содержащая описание интерфейса, заданного атрибутом iid . Этот атрибут является необязательным. Значение должно быть в формате "{tlbid}".
baseInterface IID интерфейса, из которого является производный атрибут iid . Этот атрибут является необязательным. Значение должно быть в формате "{iid}".
numMethods Количество методов, реализованных интерфейсом. Этот атрибут является необязательным. Значение должно быть в формате "n".
proxyStubClsid32 Карты идентификатор IID в clSID в 32-разрядных библиотеках DLL прокси-сервера.
threadingModel Модель потоков, используемая внутрипроцессными классами COM. Если это свойство имеет значение NULL, модель потоков не используется. Компонент создается в основном потоке клиента, а вызовы из других потоков маршалируются в этот поток. Необязательный элемент. Допустимые значения: "Apartment", "Free", "Both" и "Neutral".

windowclass

Имя класса Windows, который должен быть версией. Элемент windowclass имеет следующий атрибут.

attribute Описание
Версии Этот атрибут определяет, содержит ли имя внутреннего класса окна, используемое при регистрации, версию сборки, содержащей класс window. Значение этого атрибута может быть "да" или "нет". Значение по умолчанию — "да". Значение "no" следует использовать только в том случае, если один и тот же класс окна определяется параллельным компонентом и эквивалентным неопубликовным компонентом, и вы хотите рассматривать их как один и тот же класс окна. Обратите внимание, что обычные правила регистрации класса окна применяют только первый компонент, регистрирующий класс окна, сможет зарегистрировать его, так как он не является версией.

В следующем примере показан элемент windowclass , включенный в файловый элемент.

<file name="comctl32.dll">
        <windowClass versioned="no">ToolbarWindow32</windowClass>
</file>

Пример

Ниже приведен пример манифеста сборки.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" 
manifestVersion="1.0">
    <assemblyIdentity type="win32" name="Microsoft.Tools.SampleAssembly" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="0000000000000000"/>
    <file name="sampleu.dll" hash="3eab067f82504bf271ed38112a4ccdf46094eb5a" hashalg="SHA1">
        <comClass description="Font Property Page" clsid="{0BE35200-8F91-11CE-9DE3-00AA004BB851}"/>
        <comClass description="Color Property Page" clsid="{0BE35201-8F91-11CE-9DE3-00AA004BB851}"/>
        <comClass description="Picture Property Page" clsid="{0BE35202-8F91-11CE-9DE3-00AA004BB851}"/>
    </file>
    <file name="bar.dll" hash="ac72753e5bb20446d88a48c8f0aaae769a962338" hashalg="SHA1"/>
    <file name="foo.dll" hash="a7312a1f6cfb46433001e0540458de60adcd5ec5" hashalg="SHA1">
        <comClass description="Registrar Class" clsid="{44EC053A-400F-11D0-9DCD-00A0C90391D3}" progid="ATL.Registrar"/>
    <comInterfaceProxyStub iid="{B6EA2051-048A-11D1-82B9-00C04FB9942E}" name=" IAxWinAmbientDispatch " tlbid="{34EC053A-400F-11D0-9DCD-00A0C90391D3}"/>
        <typelib tlbid="{44EC0535-400F-11D0-9DCD-00A0C90391D3}" version="1.0" helpdir=""/>
    </file>
    <file name="sampledll.dll" hash="ba62960ceb15073d2598379307aad84f3a73dfcb" hashalg="SHA1"/>
<windowClass>ToolbarWindow32</windowClass>
        <windowClass>ComboBoxEx32</windowClass>
        <windowClass>sample_trackbar32</windowClass>
        <windowClass>sample_updown32</windowClass>
</assembly>