为什么 CLR 不检查链接到强名称 dll 的网络模块的哈希值

本文关键字:网络 模块 哈希值 dll 强名称 CLR 检查链接 为什么 | 更新日期: 2023-09-27 18:34:45

为什么CLR不检查链接到强名称dll的网络模块的哈希值?

现在整个故事..

有两个独立的 C# 源文件简单.cs复杂.cs它们被编译成两个网络模块

csc /target:module complex.cs
csc /target:module simple.cs

然后将其链接到强名称的数学中.dll

al /target:library /keyfile:keyfile.snk /out:math.dll /version:0.0.0.0 
complex.netmodule simple.netmodule

keyfile.snk 之前是通过运行以下命令创建的:

sn /k keyfile.snk

检查了数学清单.dll对应于complex.netmodule和simple.netmodule的哈希值:

.file complex.netmodule
.hash = (D2 B4 1D 11 B1 50 C2 29 01 91 49 10 2C 28 91 45   // .....P.)..I.,(.E
         24 44 A3 B5 )                                     // $D..
.file simple.netmodule
.hash = (29 85 33 28 35 94 03 32 68 E4 30 B6 02 42 B2 8F   // ).3(5..2h.0..B..
         E8 0B A8 8F ) 

构建客户端可执行文件:

csc /target:exe /reference:math.dll mathclient.cs

运行 mathclient.exe 和输出:

2+2=43 平方=9

然后修改了复杂的.cs并重新编译。在这里,我了解到 complex.netmodule 的哈希值应该被更改。

再次运行mathclient,并期望抛出异常,因为新的complex.netmodule的哈希值与math.dll清单中的哈希值不匹配。然而,结果是

2+2=23 平方=10

因此,使用了新版本的complex.netmodule。

知道为什么CLR没有对包含的网络模块执行哈希验证吗?

为什么 CLR 不检查链接到强名称 dll 的网络模块的哈希值

出于性能原因。 如果必须计算所有二进制文件的哈希值,则加载应用程序将花费很长时间。