第67页到第81页

有公钥就可以唯一标志一个程序集,所以该程序集可以被放在合适的GAC位置,也能够被其他程序集引用(在assemblyref表中有强签名)。

缺少私钥影响的是程序集不能防止被篡改。所以在开发阶段产生了延迟签名这个技术,可以用于开发的过程,在开发完毕后利用私钥给程序集签名,就可以防止被篡改(其实它本身就是一种篡改)。

延迟签名是使用SN.exe将生成程序集和对程序集进行签名分为两步,先将公钥嵌入程序集,再用私钥给程序集签名。通过往注册表写略过验证的程序集,可以将延迟签名的程序集装入gac中。此外,可以再程序集安装完成后给它施加以混淆器,然后再签名。

作者举了一个main function编译运行的例子,提到无论这个程序引用的是.net framework version是什么,它一定会调用当前运行该程序对应的CLR version的.net framework,而忽略version。这个背后的原因是CLR版本和.net framework的version是紧密捆绑在一起的。

提到了CLR一个有趣的功能,那就是类型的迁移,从一个程序集中迁移到另一个程序集中,它是通过给新旧两个类型添加attribute来使用的。它的根本原理应该也简单,给老程序集的类型添加一个引用到新程序集,凡是调用到老程序集的类型都利用添加的扩展反射调用新类型的方法。由CLR这个大管家在背后默默地干。

publisherPolicy如果包含了apply=no元素,则发布者定义的策略在runtime的时候不予以使用。

codeBase的查找顺序在gac之后,在默认的位置之前。

发布者策略程序集。这个程序集其实是CLR提供的一套机制,这个程序集必须装到gac里,程序集由两个module组成,一个清单module,一个config resource module。它的命名由policy.major.minor.assemblyname.dll,major和minor是要被策略的那个dll的version。CLR加载的时候自动从gac中查找对应version的相同公司发布的policy assembly,然后根据policy里面的config文件来加载dll。这非常适合打补丁,修bug。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值