元数据和清单之间的区别

时间:2012-02-23 04:49:31

标签: .net metadata manifest

我正在学习.NET框架并阅读元数据清单

  

“元数据是关于数据的数据,而清单是关于汇编的数据!”

问:那么表示元数据是不是很明显?

然后它有什么不同?

5 个答案:

答案 0 :(得分:14)

Manifest维护有关程序集的信息 像版本,名称区域设置和可选的强名称 唯一识别装配。这个清单 CLR使用信息。清单还包含 验证此程序集的安全性要求。它也是 包含组成的所有文件的名称和哈希值 集会。 .NET程序集清单包含一个 程序集中不同模块的加密哈希。 加载程序集时,CLR会重新计算 手头模块的哈希值,并与之比较 嵌入式哈希。如果在运行时生成的哈希值不同 从清单中发现的那个,.NET拒绝加载 汇编并抛出异常。

元数据是指有关数据的数据。元数据产生了 该程序集中可用的类型,即。类,接口, 枚举,结构等,以及它们包含的命名空间, 每种类型的名称,可见性/范围,基类, 它实现的接口,方法和范围, 和每个方法的参数,类型的属性等。 程序集元数据由高级别生成 编译器自动从源文件。编译器 将元数据嵌入目标输出文件中,一个dll, 多模块的情况下的.exe或.netmodule 组装

答案 1 :(得分:6)

这是最简单的答案。

程序集:包含程序的一个或多个文件。通常是exe或dll或这些和其他一组文件的组合

MetaData:包含两者 1)汇编元数据2)类型元数据。

1)程序集元数据也称为MANIFEST,它包含程序集的名称,版本,文化,强名称信息,参考程序集信息等。

2)Type Metadata是导出的数据类型和汇编方法。

enter image description here

答案 2 :(得分:3)

Manifest:它存储有关CLR加载程序集所需的程序集的信息(如程序集名称,版本等)。

元数据:它存储程序集的详细信息,如方法名称,成员等。

在将代码转换为MSIL时,编译器会自动生成这两个文件。

答案 3 :(得分:1)

来自"Programming .NET Components, Second Edition" By Juval Lowy published by O'Reilly第一段:

元数据:

  

元数据是描述.NET程序集中的内容的完整方式。   挖掘元数据会产生该程序集中可用的类型,   即类,接口,枚举,结构等,以及它们的包含   名称空间,每种类型的名称,可见性/范围,基础   class,它实现的接口,方法和范围,以及   每个方法的参数,类型的属性等。大会   metada是由高级编译器自动生成的   源文件。编译器将元数据嵌入目标输出中   在多模块的情况下,文件,dll,.exe或.netmodule   部件。在多模块组件的情况下,任何模块   包含IL必须在其中嵌入元数据来描述类型   在那个模块中。每个针对.NET CLR的编译器都是必需的   生成并在输出文件中嵌入元数据,以及   元数据必须采用标准格式。 .NET反思广泛   使用元数据信息来了解类型信息   动态。

     

元数据是托管程序集中的附加信息,用于描述类型,类型名称,方法名称等内容(基本上,您可以从Reflection服务检索的信息)。有关详细信息,请参阅http://msdn2.microsoft.com/en-us/library/ms404430.aspx

装配清单:

  

元数据描述了程序集中的内容,而清单则描述了内容   描述了程序集本身,提供了共享的逻辑属性   通过组件中的所有模块和所有组件。清单   包含程序集名称,版本号,语言环境和可选项   唯一标识程序集的强名称。这个清单   CLR使用信息。清单还包含   安全要求验证此程序集。它还包含名称   和组成程序集的所有文件的哈希值。互联网   程序集清单包含不同模块的加密哈希   在集会中。加载程序集时,CLR会重新计算   手头模块的哈希值,并将其与嵌入式进行比较   哈希值。如果在运行时生成的哈希与在中找到的哈希不同   清单,.NET拒绝加载程序集并抛出一个   例外。这与COM不同,在COM下可以   将原始DLL或EXE文件与另一个具有相同类型的文件交换   库/接口并通过运行导致系统损坏   恶意代码。清单也是由自动生成的   来自所有模块的源文件的高级编译器   部件。清单只嵌入到一个物理文件中,只嵌入一次   因为它对于组件中的所有模块都是通用的,而对于   元数据需要嵌入所有模块。 .NET CLR兼容   编译器必须生成清单,它应该在标准中   格式。使用清单.NET可以捕获有关其他信息   引用的程序集这确保了版本兼容性,以及   程序集可以与其他的确切信任集进行交互   它期望的组件。清单包含每个引用的程序集   name,其公钥(如果有强名称),其版本   数字和区域设置。在运行此程序集时,.NET可以保证这一点   只使用这些特定的组件,并且只能兼容   版本已加载。

     

“Manifest”是一个相当重载的术语。在.NET中,“程序集清单”是描述版本控制内容的程序集中的一些元数据。有关详细信息,请参阅此处http://msdn2.microsoft.com/en-us/library/1w45z383.aspx

您可以阅读有关汇编清单here

的更多信息

有关整个程序集和模块的元数据称为清单

答案 4 :(得分:0)

元数据描述了程序集中的内容,而清单描述了程序集本身,提供了程序集中所有模块和所有组件共享的逻辑属性。清单包含程序集名称,版本号,语言环境以及唯一标识程序集的可选强名称。