在.NET中,当exe / dll引用外部dll时,该信息如何编码到exe / dll中? 在什么时候检查dll的有效性?何时签署了签名信息?
编辑:这是在运行时
答案 0 :(得分:6)
从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关于它的文章很好地介绍了它。