CLR Via C# 3rd 阅读摘要 -- Chapter 3 - Shared Assemblies and Strongly Named Assemblies

 Two Kinds of Assemblies, Two Kinds of Deployment

 1. 弱名称程序集和强名称程序集;

 2. 两种类型程序集的部署方式:Privately、Globally。 

 Giving an Assembly a Strong Name

 1. 强名称程序集的额外标识信息:Public Key;

 2. sn.exe;

 3. csc.exe /keyfile: ; 

 

 4. 因为公钥太长了,一个程序集可能会引用多个程序集,为了节省空间,采用8字节的Hash值作为token。但是CLR不使用token来验证,看起来方便些。

 The Global Assembly Cache

 1. 不能手动拷贝程序集文件到GAC中;

 2. GacUtil.exe;

 3. 可能的话尽量用Privately部署,而不是Globally部署在GAC。 

 Building an Assembly That References a Strongly Named Assembly

 1. csc.exe查找程序集的策略:当前目录->csc.exe所在的目录->/lib指定的目录->LIB设定的目录(又看到一遍)。

 Strongly Named Assemblies are Tamper-Resistant

 1.   强名称程序集只能保证文件未被修改,并不意味着可以信任文件来源。

 Delayed Deploy

 1. SN.exe调用了CryptoAPI,保护私钥的最好办法是不在硬盘上停留,直接导出到硬件设备中,然后锁到保险柜中;

 2. 为什么要延迟签名?(私钥的控制)

 3. 延迟签名的原理;(占位先)

 4. 延迟签名的步骤;

  • csc /keyfile:MyApp.publickey /delaysign MyAssembly.cs;
  • sn.exe -Vr MyAssembly.dll
  • sn.exe -R MyAssembly.dll MyApp.privatekey
  • sn.exe -Vu MyAssembly.dll

 5. 延迟签名的注意事项

  • 别忘了最后sn.exe -Vu或者-Vx;
  • 可以用/keycontainer代替/keyfile,如果私钥在设备中;
  • 如果要混淆以保护的话,必须先混淆再签名。 

 Privately Deploying Strongly Named Assemblies

 1. 如果要部署程序集到GAC中,应用程序就不能绿色安装了 ;

 2. 如果程序集不需要共享,还是不要部署到GAC中。 

 How the Runtime Resolves Type References

 1. 在决定哪个引用类型时,CLR查找类型的3种类型:

  • 同样的文件;
  • 不同的文件,同样的程序集;装箱单的FileRef表
  • 不同的文件,不同的程序集。 

 

 2.  CLR支持类型迁移,比如System.TimeZoneInfo 从(System.Core.dll,.NET 3.5)到(MsCorLib.dll,.NET 4.0)。但是会影响已有的应用。

 Advanced Administrative Control(Configuration)

 1. 通过配置文件,管理员可以控制CLR装载哪一个版本的程序集。bindingRedirect,codeBase;

 2.  有发行策略的程序集必须部署在GAC中;

 3. 签名有发行策略的程序集,所有版本的签名密钥必须是同一对;

 4. 别滥用发行策略,只有在发布更新或服务包时才使用。并严格测试兼容性;

 5. publishPolicy apply="no"可以忽略发行策略。 

 本章小结

  本章主要关注如何创建可以被多个应用程序使用的程序集。提出了几个问题并进行了分析:

 1. 如何保证在修正bug或添加功能时不会破坏现有的应用程序?

 2. 如何解决文件版本问题?

 3. 如何创建强名称的程序集?

 4. 如何发布程序集,CLR如何定位并加载程序集?

 5. “registering”程序集到GAC的目的是什么?

 6. 如何进行延迟签名以及延迟签名的作用是什么?

 7. 如何在运行时决定类型引用?

posted @ 2010-03-12 15:50  bengxia  阅读(319)  评论(0编辑  收藏  举报
无觅相关文章插件,快速提升流量