0

CLR が厳密な名前の dll にリンクされたネットモジュールのハッシュ値をチェックしないのはなぜですか?

これで全話..

2 つの netmodule にコンパイルされた 2 つの独立した C# ソース ファイル simple.cs と complex.cs があります。

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

これらは、厳密な名前の math.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

complex.netmodule および simple.netmodule に対応するハッシュ値の math.dll のマニフェストを確認しました。

.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 ) 

クライアント exe のビルド:

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

mathclient.exe と出力を実行します。

2+2=4 3 の二乗=9

次に、complex.cs を変更して再コンパイルしました。ここで、complex.netmodule のハッシュ値を変更する必要があることがわかりました。

mathclient を再度実行すると、新しい complex.netmodule のハッシュ値が math.dll マニフェストのハッシュ値と一致しないため、例外がスローされることが予想されます。ただし結果は

2+2=2 3 の二乗=10

そのため、complex.netmodule の新しいバージョンが使用されました。

含まれているネットモジュールに対してCLRがハッシュ検証を実行しなかった理由は何ですか?

4

1 に答える 1

0

パフォーマンス上の理由から。すべてのバイナリのハッシュを計算する必要がある場合、アプリの読み込みに時間がかかりすぎます。

于 2013-10-10T20:25:47.093 に答える