.NET外部dll引用检查

本文关键字:检查 引用 dll 外部 NET | 更新日期: 2023-09-27 18:28:50

在.NET中,当exe/dll引用外部dll时,该信息是如何编码到exe/dll中的?dll的有效性在什么时候检查?何时检查签名信息?

编辑:这是在运行时

.NET外部dll引用检查

从Visual Studio命令提示符运行ildasm.exe并打开任意.NET exe或dll文件。双击Manifest,您将看到例如:

.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) 
  .ver 2:0:0:0
}

这告诉您正在查看的程序集依赖于另一个名为mscorlib的程序集。或者换句话说,程序集的元数据包含对它所依赖的所有DLL的引用。查看其他.assembly指令以查看其他依赖项,我选择了一个你总能找到的指令。

.ver条目很重要,它说明需要mscorlib的哪个[AssemblyVersion]。在我的情况下,版本2.0.0.0,在您的情况下可能是4.0.0.0。用于该特定程序集的两个最常见的版本。对于自定义程序集,任何事情都是可能的,[AssemblyVersion]属性非常重要。

.publickeytoken是有效性检查的一部分,它有助于在运行时验证程序集的强名称。当加载程序集并启用强名称验证时,就会发生这种情况。只有从不受信任的位置检索程序集时,才会启用它。

只要需要编译使用另一个程序集中定义的类型的代码,程序集就会由抖动加载。CLR的工作是从上面的.assembly引用中提供的信息中查找该程序集。请注意,该信息不会存储文件的路径。CLR定位该文件的方式本身就是一个很长的故事,MSDN Library关于它的文章对此进行了很好的介绍