程序集清单
程序集清单是描述并行程序集的 XML 文件。 程序集清单描述程序集的并行程序集、文件和资源的名称和版本,以及程序集对其他并行程序集的依赖关系。 正确安装、激活和执行并行程序集要求程序集清单始终伴随系统上的程序集。
有关 XML 架构的完整列表,请参阅 清单文件架构。
程序集清单具有以下元素和属性。
元素 | 属性 | 必须 |
---|---|---|
装配 | 是 | |
manifestVersion | 是 | |
noInheritable | 否 | |
assemblyIdentity | 是 | |
type | 是 | |
name | 是 | |
language | 否 | |
processorArchitecture | 否 | |
version | 是 | |
publicKeyToken | 否 | |
依赖 | 否 | |
dependentAssembly | 否 | |
文件 | 否 | |
name | 是 | |
hashalg | 否 | |
hash | 否 | |
comClass | 否 | |
description | 否 | |
clsid | 是 | |
threadingModel | 否 | |
tlbid | 否 | |
progid | 否 | |
miscStatus | 否 | |
miscStatusIcon | 否 | |
miscStatusContent | 否 | |
miscStatusDocPrint | 否 | |
miscStatusThumbnail | 否 | |
typelib | 否 | |
tlbid | 是 | |
version | 是 | |
helpdir | 是 | |
resourceid | 否 | |
flag | 否 | |
comInterfaceExternalProxyStub | 否 | |
iid | 是 | |
baseInterface | 否 | |
numMethods | 否 | |
name | 否 | |
tlbid | 否 | |
proxyStubClsid32 | 否 | |
comInterfaceProxyStub | 否 | |
iid | 是 | |
name | 是 | |
tlbid | 否 | |
baseInterface | 否 | |
numMethods | 否 | |
proxyStubClsid32 | 否 | |
threadingModel | 否 | |
windowClass | 否 | |
版本 | 否 |
文件位置
程序集清单可以安装在三个位置:
- 作为 共享程序集附带的清单,程序集清单应作为单独的文件安装在并行程序集缓存中。 这通常是 Windows 目录中的 WinSxS 文件夹。
- 作为 私有程序集附带的清单,程序集清单应安装在应用程序的目录结构中。 这通常是与应用程序的可执行文件位于同一文件夹中的单独文件。
- 作为 DLL 中的资源,程序集可供 DLL 的专用使用。 程序集清单不能作为资源包含在 EXE 中。 EXE 文件可能包含 作为资源的应用程序清单 。
文件名语法
程序集清单的名称是后跟 .manifest
的任何有效文件名。
例如,引用 myassembly 的程序集清单将使用以下文件名语法: myassembly.<resource ID>.manifest
。
如果程序集清单作为单独的文件安装,或者资源 ID 为 1,则可以省略 <resource ID>
字段。
注意
由于并行搜索专用程序集的方式,以下命名限制在将 DLL 打包为专用程序集时适用。 建议执行此操作的方法是将程序集清单作为资源放入 DLL 中。 在这种情况下,资源 ID 必须等于 1,并且专用程序集的名称可能与 DLL 的名称相同。 例如,如果 DLL 的名称Microsoft.Windows.mysample.dll,则清单的 assemblyIdentity 元素中使用的 name 属性的值也可能是 Microsoft.Windows.mysample。 另一种方法是将程序集清单放在单独的文件中。 在这种情况下,程序集的名称及其清单必须不同于 DLL 的名称。 例如,Microsoft.Windows.mysampleAsm、Microsoft.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 元素之后。 如果程序集由包含 noInherit 元素的任何 应用程序清单 使用,则程序集清单中需要 noInheritable 元素。 应用程序清单中的 noInheritable 元素不起作用。 noInheritable 元素没有子元素。
-
assemblyIdentity
-
描述并唯一标识并行程序集。
作为 程序集 元素的第一个子元素, assemblyIdentity 描述并唯一标识拥有此程序集清单的并行程序集。 这称为程序集清单的 DEF-context assemblyIdentity 。
作为 dependentAssembly 元素的第一个子元素, assemblyIdentity 描述并唯一标识 DEF 上下文 assemblyIdentity 使用的并行程序集。 这称为程序集清单的 REF 上下文 assemblyIdentity 。 DEF 上下文程序集需要 REF 上下文程序集才能正常工作。 请注意,每个 REF 上下文 assemblyIdentity 都必须与引用的程序集自己的程序集清单中的相应 DEF 上下文 assemblyIdentity 完全匹配。
此元素没有子元素。 assemblyIdentity 元素具有以下属性。
Attribute 说明 type 指定程序集类型。 该值必须是 win32,并且以小写形式表示。 必需。 name 唯一命名程序集。 对程序集名称使用以下格式:Organization.Division.Name。 例如,Microsoft.Windows.mysampleAsm。 必需。 请注意,如果 DLL 打包为具有单独清单文件的私有程序集,则程序集的名称必须与 DLL 和清单的名称不同。 language 标识程序集的语言。 可选。 如果程序集特定于语言,请指定 DHTML 语言代码。 在面向全球使用的程序集清单的 DEF-context assemblyIdentity 中, (非特定语言) 省略语言属性。
在用于全球使用的程序集清单的 REF-context assemblyIdentity 中, (非特定语言) 将语言的值设置为“*”。processorArchitecture 指定处理器。 对于 32 位 Windows,有效值为 x86,对于 64 位 Windows,有效值为 ia64。 可选。 version 指定程序集版本。 使用由四部分构成的版本格式:mmmmm.nnnnn.ooooo.ppppp。 由句点分隔的每个部分可以是 0-65535(含 0-65535)。 有关详细信息,请参阅 程序集版本。 必需。 publicKeyToken 一个 16 个字符的十六进制字符串,表示对程序集进行签名的公钥的 SHA-1 哈希的最后 8 个字节。 用于对目录进行签名的公钥必须为 2048 位或更大。 对于共享的并行程序集是必需的。 -
依赖
-
包含至少一个 dependentAssembly 的容器元素。 第一个子元素必须是 dependentAssembly 元素。 依赖项没有属性。 可选。
-
dependentAssembly
-
第一个子元素必须是 assemblyIdentity 元素,该元素描述并唯一标识拥有此程序集清单的并行程序集所使用的并行程序集。 每个 dependentAssembly 必须正好位于一个 依赖项内。 可选。
-
文件
-
包含并行程序集使用的文件。 包含 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 此 COM 组件的类型库的 GUID。 该值必须采用 GUID 的格式。 可选。 progid 与 COM 组件关联的版本相关编程标识符。 ProgID 的格式为 <供应商>。<组件>。<版本>。 miscStatus 程序集中的重复项将清单 MiscStatus 注册表项提供的信息。 如果找不到 miscStatusIcon、 miscStatusContent、 miscStatusDocprint 或 miscStatusThumbnail 属性的值,则 miscStatus 中列出的相应默认值将用于缺少的属性。 该值可以是下表中以逗号分隔的属性值列表。 如果 COM 类是需要 Miscstatus 注册表项值的 OCX 类,则可以使用此属性。 miscStatusIcon 程序集清单中的重复项 - 由 DVASPECT_ICON 提供的信息。 它可以提供对象的图标。 该值可以是下表中以逗号分隔的属性值列表。 如果 COM 类是需要 Miscstatus 注册表项值的 OCX 类,则可以使用此属性。 miscStatusContent 程序集清单中的重复项 - 由 DVASPECT_CONTENT 提供的信息。 它可以提供可通过屏幕或打印机显示的复合文档。 该值可以是下表中以逗号分隔的属性值列表。 如果 COM 类是需要 Miscstatus 注册表项值的 OCX 类,则可以使用此属性。 miscStatusDocprint 程序集清单中的重复项 - 由 DVASPECT_DOCPRINT 提供的信息。 它可以提供可在屏幕上显示的对象表示形式,就像打印到打印机一样。 该值可以是下表中以逗号分隔的属性值列表。 如果 COM 类是需要 Miscstatus 注册表项值的 OCX 类,则可以使用此属性。 miscStatusThumbnail 程序集清单中的重复项 - 由 DVASPECT_THUMBNAIL 提供的信息。 它可以提供可在浏览工具中显示的对象的缩略图。 该值可以是下表中以逗号分隔的属性值列表。 如果 COM 类是需要 Miscstatus 注册表项值的 OCX 类,则可以使用此属性。 comClass 元素可以将 <progid>... 元素作为子元素,其中列出了版本相关的 progid。
以下示例演示 file 元素中包含的 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 注册表子项来指定如何创建和显示对象,则可以通过在程序集清单中复制此信息来启用该对象。 使用 comClass 元素的 miscStatus、miscStatusIcon、miscStatusContent、miscStatusDocprint 和 miscStatusThumbnail 属性指定对象的特征。 将这些属性设置为下表中以逗号分隔的属性值列表。 这些属性复制由 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 alignable OLEMISC_ALIGNABLE simpleframe OLEMISC_SIMPLEFRAME setclientsitefirst OLEMISC_SETCLIENTSITEFIRST imemode TOLEMISC_IMEMODE ignoreativatewhenvisible OLEMISC_IGNOREACTIVATEWHENVISIBLE wantstomenumerge OLEMISC_WANTSTOMENUMERGE supportsmultilevelundo OLEMISC_SUPPORTSMULTILEVELUNDO -
typelib
-
文件元素的子元素。 可选。
typelib 元素具有下表所示的属性。
Attribute 说明 tlbid 类型库的唯一 ID。 必需。 version 类型库的两部分版本号。 如果只有次要版本号增加,则以兼容的方式支持以前类型库的所有功能。 如果主版本号发生更改,则必须重新编译针对类型库编译的代码。 类型库的版本号可能与应用程序的版本号不同。 必需。 helpdir 类型库中类型的帮助文件所在的目录。 如果应用程序支持多种语言的类型库,则库可能会引用帮助文件目录中的不同文件名。 如果没有值,则指定“”。 必需。 resourceid 区域设置标识符 (LCID) 的十六进制字符串表示形式。 它是 1 到 4 个十六进制数字,没有 0x 前缀和前导零。 LCID 可能具有非特定子语言标识符。 有关详细信息,请参阅 区域设置标识符。 可选。 flag 此类型库的类型库标志的字符串表示形式。 具体而言,它应为以下值之一:“RESTRICTED”、“CONTROL”、“HIDDEN”和“HASDISKIMAGE”。 这些是 LIBFLAGS 枚举的值,是 ICreateTypeLib::SetLibFlags 方法的 uLibFlags 参数中指定的相同标志。 可选。 以下示例演示 file 元素中包含的 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 将 IID 映射到 32 位代理 DLL 中的 CLSID。 以下示例演示 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 。为其声明代理的接口的 IID。 必需。 该值的格式应为:“{iid}”。 name 接口的名称,如代码中所示。 例如,“IViewObject”。 这不应是描述性字符串。 此属性是可选的。 该值应采用“name”格式。 tlbid 包含 由 iid 属性指定的接口的说明的类型库。 此属性是可选的。 该值的格式应为:“{tlbid}”。 baseInterface 从中派生由 iid 属性描述的接口的 IID 。 此属性是可选的。 该值的格式应为:“{iid}”。 numMethods 接口实现的方法数。 此属性是可选的。 该值的格式应为:“n”。 proxyStubClsid32 将 IID 映射到 32 位代理 DLL 中的 CLSID。 threadingModel 进程内 COM 类使用的线程模型。 如果此属性为 null,则不使用线程模型。 组件在客户端的主线程上进行创建,而来自其他线程的调用被封送到此线程。 可选。 有效值为:“Apartment”、“Free”、“Both”和“Neutral”。 -
windowclass
-
要进行版本控制的 Windows 类的名称。 windowclass 元素具有以下属性。
Attribute 说明 版本 此属性控制注册中使用的内部窗口类名是否包含包含窗口类的程序集版本。 此属性的值可以是“yes”或“no”。 默认值为“yes”。 仅当同一窗口类由并行组件和等效的非并行组件定义,并且你希望将它们视为同一窗口类时,才应使用值“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>