现在有一个强命名的程序集ConsummedLibrary.dll,同时有一个使用该程序集的程序Program.exe。
实验一:
使用ILDASM.exe反汇编Program.exe,把其中引用ConsummedLibrary.dll的信息修改一下,把.publickeytoken注释掉,如下:
.assemblyextern ConsummedLibrary
{
//.publickeytoken = (E4 6D C9 A7 C3 A5 D6 D7) // .m......
.ver 0:0:0:0
}
然后使用ILASM编译。运行,会出现错误,说找不到指定的ConsummedLibrary.dll。
实验二:
(在实验一的基础上)
反汇编ConsummedLibrary.dll,把其中的签名去掉,如下
//.publickey= (00 24 00 00 04 80 00 00 94 00 00 00 06 02 00 00 // .$..............
// 00 24 00 00 52 53 41 31 00 04 0000 01 00 01 00 // .$..RSA1........
// 35 15 D1 DB FA CF E2 0C 56 CB DA58 4A 4D C7 12 // 5.......V..XJM..
// C9 A6 6E D4 94 F2 BC C0 5A 58 6366 61 16 0D 5D // ..n.....ZXcfa..]
// 64 8C 62 8C 50 58 E2 BF A5 9A 0C0A BA 05 45 7C // d.b.PX........E|
// 57 EC 54 07 31 FA 22 33 94 CE 6AEB A6 75 16 AB // W.T.1."3..j..u..
// 3B 44 3E F5 A8 BD 14 E2 E1 C8 1EED 35 CA E9 ED // ;D>.........5...
// 9F DE 26 0D 34 02 96 97 84 D9 A747 92 DD B5 AA // ..&.4......G....
// BC A1 5D FD 1E AE 27 05 E1 5B F5B0 40 4F 40 9D // ..]...'..[..@O@.
// FB 8A 61 02 98 64 BC 54 08 49 9F16 0E 60 3A DC ) // ..a..d.T.I...`:.
再编译,运行,正常。
通过这个例子我知道了:
要修改一个引用强命名程序集的程序,你必须修改至少两个地方。
a.程序本身对于强命名的引用,即把publickeytoken去掉
b.程序集本身的签名