Поделиться через


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

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

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

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

Элемент Атрибуты Обязательно
собрание Да
версия манифеста Да
noInheritable нет
assemblyIdentity Да
тип Да
имя Да
языка нет
processorArchitecture нет
версия Да
publicKeyToken нет
зависимость нет
зависимыйAssembly нет
file нет
имя Да
hashalg нет
хэш нет
comClass нет
описание нет
clsid Да
threadingModel нет
tlbid нет
progid нет
miscStatus нет
miscStatusIcon нет
miscStatusContent нет
miscStatusDocPrint нет
miscStatusThumbnail нет
typelib нет
tlbid Да
версия Да
helpdir Да
resourceid нет
флаги нет
comInterfaceExternalProxyStub нет
iid Да
baseInterface нет
numMethods нет
имя нет
tlbid нет
proxyStubClsid32 нет
comInterfaceProxyStub нет
iid Да
имя Да
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, значение атрибута имени, используемого в элементе assemblyIdentity манифеста, также может быть Microsoft.Windows.mysample. Альтернативным способом является размещение манифеста сборки в отдельном файле. В этом случае имя сборки и его манифеста должно отличаться от имени библиотеки DLL. Например, Microsoft.Windows.mysampleAsm, Microsoft.Windows.mysampleAsm.manifest и Microsoft.Windows.Mysample.dll. Дополнительные сведения о том, как параллельно выполняется поиск частных сборок, см. в разделе "Последовательность поиска сборок".

Элементы

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

сборка

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

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

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

Свойство Описание
версия манифеста Атрибут manifestVersion должен иметь значение 1.0.

noInheritable

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

assemblyIdentity

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

Как первый подэлемент элемента сборки , assemblyIdentity описывает и однозначно идентифицирует боковую сборку, которая владеет этим манифестом сборки. Это называется сборкой DEF-contextIdentity манифеста сборки.

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

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

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

зависимость

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

зависимыйAssembly

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

файл

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

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

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

comClass

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

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

Свойство Описание
описание Имя класса.
clsid GUID, который однозначно идентифицирует класс. Обязательное. Значение должно быть в формате допустимого GUID.
threadingModel Модель потоков, используемая классами COM в процессе. Если это свойство равно NULL, модель потоков не используется. Компонент создается на основном потоке клиента и вызовы из других потоков маршалируются в этот поток. Необязательно. Допустимые значения: "Квартира", "Бесплатный", "Оба" и "Нейтральный".
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
статичный 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 содержит атрибуты, показанные в следующей таблице.

Свойство Описание
tlbid Уникальный идентификатор библиотеки типов. Обязательное.
версия Номер версии двух частей библиотеки типов. Если увеличивается только дополнительный номер версии, все функции предыдущей библиотеки типов поддерживаются совместимым способом. Если основной номер версии изменяется, код, скомпилированный в библиотеке типов, должен быть перекомпилирован. Номер версии библиотеки типов может отличаться от номера версии приложения. Обязательное.
helpdir Каталог, в котором находится файл справки для типов в библиотеке типов. Если приложение поддерживает библиотеки типов для нескольких языков, библиотеки могут ссылаться на разные имена файлов в каталоге файлов справки. Если значения нет, укажите "". Обязательное.
resourceid Шестнадцатеричное строковое представление идентификатора языкового стандарта (LCID). Это один до четырех шестнадцатеричных цифр без префикса 0x и без начальных нулей. LCID может иметь нейтральный идентификатор подлангуга. Дополнительные сведения см. в разделе Идентификаторы языкового стандарта. Необязательно.
флаги Строковое представление флагов библиотеки типов для этой библиотеки типов. В частности, он должен быть одним из "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 содержит атрибуты, показанные в следующей таблице.

Свойство Описание
iid IID интерфейса, для которого объявляется прокси-сервер. Обязательное. Значение должно быть в форме: "{iid}".
baseInterface IiD интерфейса, из которого производный атрибут iid . Этот атрибут является необязательным. Значение должно быть в форме: "{iid}".
numMethods Количество методов, реализованных интерфейсом. Этот атрибут является необязательным. Значение должно быть в форме: "n".
имя Имя интерфейса, как показано в коде. Например, "IViewObject". Это не должно быть описательной строкой. Этот атрибут является необязательным. Значение должно быть в форме: "имя".
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 имеет следующие атрибуты.

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

windowclass

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

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

В следующем примере показан элемент 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>