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

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

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

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

Элемент Атрибуты Обязательно
Сборки Да
manifestVersion Да
NoInheritable Нет
assemblyIdentity Да
type Да
name Да
language Нет
processorArchitecture Нет
version Да
Publickeytoken Нет
Зависимостей Нет
dependentAssembly Нет
файл Нет
name Да
hashalg Нет
hash Нет
comClass Нет
Описание Нет
Clsid Да
threadingModel Нет
tlbid Нет
Progid Нет
miscStatus Нет
miscStatusIcon Нет
miscStatusContent Нет
miscStatusDocPrint Нет
miscStatusThumbnail Нет
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-файл может содержать манифест приложения в качестве ресурса.

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

Имя манифеста сборки — это любое допустимое имя файла, за которым следует .manifest.

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

Примечание

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

Элементы

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

Сборки

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

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

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

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

NoInheritable

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

assemblyIdentity

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

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

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

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

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

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

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

dependentAssembly

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

Файл

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

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

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

comClass

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

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

attribute Описание
description Имя класса.
Clsid Guid, который однозначно идентифицирует класс . Обязательный. Значение должно быть в формате допустимого GUID.
threadingModel Модель потоков, используемая внутрипроцессными COM-классами. Если это свойство имеет значение NULL, то потоковая модель не используется. Компонент создается в потоке main клиента, и вызовы из других потоков маршалируются в этот поток. Необязательный элемент. Допустимые значения: "Apartment", "Free", "Both" и "Neutral".
tlbid GUID для библиотеки типов для этого com-компонента. Значение должно быть в формате GUID. Необязательный элемент.
Progid Программный идентификатор, зависящий от версии, связанный с компонентом COM. Формат ProgID — vendor><.<компонент>.<версия>.
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>... в качестве дочерних элементов, которые перечисляют зависимые от версии прогида.

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

<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 .

<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 Сопоставляет IID с 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, то модель потоков не используется. Компонент создается в потоке main клиента, и вызовы из других потоков маршалируются в этот поток. Необязательный элемент. Допустимые значения: "Apartment", "Free", "Both" и "Neutral".

windowclass

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

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

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

<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>