fbpx
维基百科

程序集清单

程序集清单(英語:assembly manifest)是.Net Framework中的文本文件,包含了CLI 程序集元数据,包括程序集的组建间的依赖关系、解决资源与类的引用、版本信息、作用域信息、安全许可等。[1]存储在PE文件(.exe或.dll)用通用中间语言 (MSIL) 代码表示。

嵌入到程序集中的程序集清单可用Windows SDK中的IL反汇编程序(ILDASM.exe)查看。

程序集清单的内容 编辑

下表的前四行:程序集名字、版本号、culture、强名字信息,组成了程序集的identity。

程序集清单的内容
信息 描述
Assembly name 一个文本字符串指出程序集的名字。
Version number 主版本号、次版本号、revision号、build号。通用语言运行时使用这些版本号执行版本政策(version policy)。
Culture 该程序集支持的文化或语言的信息。 一个带有culture信息的程序集自动被认为是一个satellite程序集。
Strong name information 对于一个被给定一个强名字程序集,发布者的公钥
程序集中所有文件的列表 包含在程序集中的每个文件的哈希值与文件名。注意,组成程序集的所有文件必须在包含了程序集清单的文件所在的目录中。
类型推导信息 对于程序集输出的类型,通用语言运行时使用该信息把类型推导映射到包含了该类型声明与实现的那个文件。
被引用的程序集的信息 当前程序集静态引用的其他程序集的列表。每个引用包含了被依赖的程序集的名字、版本、culture、操作系统等等,以及公钥(如果被依赖的程序集是强名字)。

.NET实现 编辑

Manifest是一个以.manifest为后缀的XML文件。其内部的信息:

  • <assemblyIdentity>元素则标识着一个唯一的程序集
  • 指定了组成程序集的文件及Windows类。

操作系统首先读取Manifest,获得exe文件需要调用的DLL的manifest。再根据据此信息去寻找对应的DLL。这样就可能区别不同版本的同一个DLL文件。

共享程序集的Manifests存储在WINDOWS/WinSxS/Manifests目录中。这是Windows XP以上版本操作系统提供的非托管(多版本)并行缓存(side-by-side cache)中安装了强名字的系统库的程序集清单。在WinSxS目录下,每个程序集都会有一个目录,另外,还有两个目录分别是Manifests和Policies,其中包含了版本的相关信息。例如:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">  <noInheritable></noInheritable>  <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.42" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>  <file name="msvcr80.dll" hash="2a0d797a8c5eac76e54e98db9682e0938c614b45" hashalg="SHA1">  <asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">  <dsig:Transforms>  <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform>  </dsig:Transforms>  <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod>  <dsig:DigestValue>phRUExlAeZ8BwmlD8VlO5udAnRE=</dsig:DigestValue>  </asmv2:hash>  </file>  <file name="msvcp80.dll" hash="cc4ca55fb6aa6b7bb8577ab4b649ab77e42f8f91" hashalg="SHA1">  <asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">  <dsig:Transforms>  <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform>  </dsig:Transforms>  <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod>  <dsig:DigestValue>7AY1JqoUvK3u/6bYWbOagGgAFbc=</dsig:DigestValue>  </asmv2:hash>  </file>  <file name="msvcm80.dll" hash="55e8e87bbde00d1d96cc119ccd94e0c02c9a2768" hashalg="SHA1">  <asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">  <dsig:Transforms>  <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform>  </dsig:Transforms>  <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod>  <dsig:DigestValue>hWq8zazTsMeKVxWFBa6bnv4hEOw=</dsig:DigestValue>  </asmv2:hash>  </file> </assembly> 

使用者:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?> <assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>  <dependency>  <dependentAssembly>  <assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />  </dependentAssembly>  </dependency> </assembly> 

在WINDOWS/WinSxS/Policies目录下的Policy文件,来指出老版本到新版本的确认映射关系。解决库升级带来的版本兼容问题。例如:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!-- Copyright ? 1981-2001 Microsoft Corporation --> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">  <assemblyIdentity type="win32-policy" name="policy.8.0.Microsoft.VC80.CRT" version="8.0.50727.42" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/>  <dependency>  <dependentAssembly>  <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/>  <bindingRedirect oldVersion="8.0.41204.256-8.0.50608.0" newVersion="8.0.50727.42"/>  </dependentAssembly>  </dependency> </assembly> 

其中<bindingRedirect>标签便指定了所有8.0.41204.256-8.0.50608.0版本的需求,映射到8.0.50727.42这个系统中安装的比较新的版本的库。

参考文献 编辑

  1. ^ .NET 中的程序集 at MSDN. [2019-07-04]. (原始内容于2019-07-04). 

程序集清单, 英語, assembly, manifest, framework中的文本文件, 包含了cli, 程序集的元数据, 包括程序集的组建间的依赖关系, 解决资源与类的引用, 版本信息, 作用域信息, 安全许可等, 存储在pe文件, exe或, 用通用中间语言, msil, 代码表示, 嵌入到程序集中的可用windows, sdk中的il反汇编程序, ildasm, 查看, 的内容, 编辑下表的前四行, 程序集名字, 版本号, culture, 强名字信息, 组成了程序集的identity, 的内容, 信息. 程序集清单 英語 assembly manifest 是 Net Framework中的文本文件 包含了CLI 程序集的元数据 包括程序集的组建间的依赖关系 解决资源与类的引用 版本信息 作用域信息 安全许可等 1 存储在PE文件 exe或 dll 用通用中间语言 MSIL 代码表示 嵌入到程序集中的程序集清单可用Windows SDK中的IL反汇编程序 ILDASM exe 查看 程序集清单的内容 编辑下表的前四行 程序集名字 版本号 culture 强名字信息 组成了程序集的identity 程序集清单的内容 信息 描述Assembly name 一个文本字符串指出程序集的名字 Version number 主版本号 次版本号 revision号 build号 通用语言运行时使用这些版本号执行版本政策 version policy Culture 该程序集支持的文化或语言的信息 一个带有culture信息的程序集自动被认为是一个satellite程序集 Strong name information 对于一个被给定一个强名字程序集 发布者的公钥程序集中所有文件的列表 包含在程序集中的每个文件的哈希值与文件名 注意 组成程序集的所有文件必须在包含了程序集清单的文件所在的目录中 类型推导信息 对于程序集输出的类型 通用语言运行时使用该信息把类型推导映射到包含了该类型声明与实现的那个文件 被引用的程序集的信息 当前程序集静态引用的其他程序集的列表 每个引用包含了被依赖的程序集的名字 版本 culture 操作系统等等 以及公钥 如果被依赖的程序集是强名字 NET实现 编辑Manifest是一个以 manifest为后缀的XML文件 其内部的信息 lt assemblyIdentity gt 元素则标识着一个唯一的程序集 指定了组成程序集的文件及Windows类 操作系统首先读取Manifest 获得exe文件需要调用的DLL的manifest 再根据据此信息去寻找对应的DLL 这样就可能区别不同版本的同一个DLL文件 共享程序集的Manifests存储在WINDOWS WinSxS Manifests目录中 这是Windows XP以上版本操作系统提供的非托管 多版本 并行缓存 side by side cache 中安装了强名字的系统库的程序集清单 在WinSxS目录下 每个程序集都会有一个目录 另外 还有两个目录分别是Manifests和Policies 其中包含了版本的相关信息 例如 lt xml version 1 0 encoding UTF 8 standalone yes gt lt assembly xmlns urn schemas microsoft com asm v1 manifestVersion 1 0 gt lt noInheritable gt lt noInheritable gt lt assemblyIdentity type win32 name Microsoft VC80 CRT version 8 0 50727 42 processorArchitecture x86 publicKeyToken 1fc8b3b9a1e18e3b gt lt assemblyIdentity gt lt file name msvcr80 dll hash 2a0d797a8c5eac76e54e98db9682e0938c614b45 hashalg SHA1 gt lt asmv2 hash xmlns asmv2 urn schemas microsoft com asm v2 xmlns dsig http www w3 org 2000 09 xmldsig gt lt dsig Transforms gt lt dsig Transform Algorithm urn schemas microsoft com HashTransforms Identity gt lt dsig Transform gt lt dsig Transforms gt lt dsig DigestMethod Algorithm http www w3 org 2000 09 xmldsig sha1 gt lt dsig DigestMethod gt lt dsig DigestValue gt phRUExlAeZ8BwmlD8VlO5udAnRE lt dsig DigestValue gt lt asmv2 hash gt lt file gt lt file name msvcp80 dll hash cc4ca55fb6aa6b7bb8577ab4b649ab77e42f8f91 hashalg SHA1 gt lt asmv2 hash xmlns asmv2 urn schemas microsoft com asm v2 xmlns dsig http www w3 org 2000 09 xmldsig gt lt dsig Transforms gt lt dsig Transform Algorithm urn schemas microsoft com HashTransforms Identity gt lt dsig Transform gt lt dsig Transforms gt lt dsig DigestMethod Algorithm http www w3 org 2000 09 xmldsig sha1 gt lt dsig DigestMethod gt lt dsig DigestValue gt 7AY1JqoUvK3u 6bYWbOagGgAFbc lt dsig DigestValue gt lt asmv2 hash gt lt file gt lt file name msvcm80 dll hash 55e8e87bbde00d1d96cc119ccd94e0c02c9a2768 hashalg SHA1 gt lt asmv2 hash xmlns asmv2 urn schemas microsoft com asm v2 xmlns dsig http www w3 org 2000 09 xmldsig gt lt dsig Transforms gt lt dsig Transform Algorithm urn schemas microsoft com HashTransforms Identity gt lt dsig Transform gt lt dsig Transforms gt lt dsig DigestMethod Algorithm http www w3 org 2000 09 xmldsig sha1 gt lt dsig DigestMethod gt lt dsig DigestValue gt hWq8zazTsMeKVxWFBa6bnv4hEOw lt dsig DigestValue gt lt asmv2 hash gt lt file gt lt assembly gt 使用者 lt xml version 1 0 encoding UTF 8 standalone yes gt lt assembly xmlns urn schemas microsoft com asm v1 manifestVersion 1 0 gt lt dependency gt lt dependentAssembly gt lt assemblyIdentity type win32 name Microsoft VC80 CRT version 8 0 50608 0 processorArchitecture x86 publicKeyToken 1fc8b3b9a1e18e3b gt lt dependentAssembly gt lt dependency gt lt assembly gt 在WINDOWS WinSxS Policies目录下的Policy文件 来指出老版本到新版本的确认映射关系 解决库升级带来的版本兼容问题 例如 lt xml version 1 0 encoding UTF 8 standalone yes gt lt Copyright 1981 2001 Microsoft Corporation gt lt assembly xmlns urn schemas microsoft com asm v1 manifestVersion 1 0 gt lt assemblyIdentity type win32 policy name policy 8 0 Microsoft VC80 CRT version 8 0 50727 42 processorArchitecture x86 publicKeyToken 1fc8b3b9a1e18e3b gt lt dependency gt lt dependentAssembly gt lt assemblyIdentity type win32 name Microsoft VC80 CRT processorArchitecture x86 publicKeyToken 1fc8b3b9a1e18e3b gt lt bindingRedirect oldVersion 8 0 41204 256 8 0 50608 0 newVersion 8 0 50727 42 gt lt dependentAssembly gt lt dependency gt lt assembly gt 其中 lt bindingRedirect gt 标签便指定了所有8 0 41204 256 8 0 50608 0版本的需求 映射到8 0 50727 42这个系统中安装的比较新的版本的库 参考文献 编辑 NET 中的程序集 at MSDN 2019 07 04 原始内容存档于2019 07 04 取自 https zh wikipedia org w index php title 程序集清单 amp oldid 76275012, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。