这是 Jeffrey Richter 的《CLR via C#》一书的引文:
“当您构建强命名程序集时,程序集的 FileDef list 元数据表包括组成程序集的所有文件的列表。 当每个文件的名称添加到 list 中时,文件的内容将被散列,并且该散列 值与文件名一起存储在 FileDef 表中。”
问题: 您能否解释一下每个文件(我的理解是引用的程序集+资源)是否经过哈希处理,以及每个文件的哈希值是否存储在 MANIFEST 中,我在哪里/如何找到/查看 list 中的这些哈希值?
当我打开 list 时,我无法找到我拥有的示例程序集。我只在 . assembly ConsoleTests {...}
下看到程序集信息最佳答案
对于组成程序集的所有文件,作者指的是 netmodule
,而不是引用的程序集。
如果程序集仅包含其自己的单个文件,则 FileDef
表将为空。
如果您尝试构建由多个模块组成的程序集,您将能够在 list 中看到哈希值。试试这个:
(1) 创建三个源文件(三个模块):
// module1.cs
namespace MultiModuleAssembly
{
public class Class1 { }
}
// module2.cs
namespace MultiModuleAssembly
{
public class Class2 { }
}
// main.cs
namespace MultiModuleAssembly
{
public class Program
{
public static void Main(string[] args)
{
Class1 c1 = new Class1();
Class2 c2 = new Class2();
}
}
}
(2) 将各个文件编译成.netmodule
:
csc /t:module module1.cs
csc /t:module module2.cs
csc /t:module main.cs /addmodule:module1.netmodule /addmodule:module2.netmodule
(3) 使用 key 对主模块进行签名:
al main.netmodule /keyfile:key.snk /out:main-signed.dll
(4) 在ildasm
中打开main-signed.dll
,双击M A N I F E S T
节点:
// Somewhere in the middle of the listing
.file main.netmodule
.hash = (89 84 FB F2 BB 72 AA 13 44 76 A5 49 8F 13 99 3E // .....r..Dv.I...>
54 30 24 84 ) // T0$.
关于.net - 在每个文件的 list 中哪里可以看到哈希值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9545125/