(三)共享程序集(随笔)

1. 两种程序集,两种部署方式

       私有部署:能够方便的控制程序集的命名,版本,行为;

       全局部署:多个应用程序共同访问程序集;

        强命名程序集与弱命名程序集的区别:强命名程序集有一个发布者的公钥私钥对签名,其中公钥私钥对唯一标示了发布者,实施安全策略与版本策略。     

2. 强命名程序集

      一个强命名的程序集包含了唯一特性:程序集名称,版本号,语言文化,公钥标记。

      可以通过System.Reflection.AssemblyName,获取CultureInfo,FullName,KeyPair,Name,Version。

      强命名工具:SN.EXE

      强命名处理: 先对PE进行散列码处理,  CLR表头 加 RSA数字签名;AssemblyDef清单中加公钥标记。

3. 全局程序集缓存(GAC内部结构)

     全局程序集缓存(GlobalAssemblyCache,GAC) 通常在c:\windows\Assembly\GAC目录下,便于多个调用的应用程序查询到。

     GAC是一个结构化目录,包含很多由特定算法产生的子目录。

      采用GACUtil.exe工具,将强命名程序集添加到GAC中。

4. 引用强命名程序集

      一份程序集拷贝到CLR目录(方便我们生产自己的程序集),一份拷贝到GAC目录(方便运行时加载这些程序集文件)

      相应文件(response file)是一组包含编译器命令行开关的文件。

5. 强命名程序防篡改特性   

      散列+私有密钥   

6. 延迟签名

       当我们打包强命名的程序集是,需要使用安全的私钥来前面;在开发测试阶段,需要推迟签名。

       使用公钥签名(不能防止篡改),但是具备共享程序集的作用。

7. 强命名程序集的私有部署

     使用codebase ,不被鼓励,原因是没有那个程序可以控制强命名程序集的何时卸载。

8. 并存执行

      CLR能够将文件名相同但存放路径不同的程序集加载到同一地址空间,这是并存技术(Side by Side),是解决(DLL hell)的关键技术。

      优势:不需要兼容旧版本,快速推出新版本。

     注意:避免并存机制带来的诡异bug;当一个应用程序加载一个版本的程序集后,为其开辟了一块内存空间,而另外一个程序加载了另外一个版本的程序集后,使用的还是第一个程序集开辟的内存空间。     

9. CLR 如何解析类型引用

     CLR 在三个地方之一找到该类型:

          同一文件:在编译时就确定下来了,是早绑定( early bound)

          不同文件,同一程序集:确保文件在当前程序集清单FileDef表内,加载并检查其散列值确保文件完整,之后查找类型。

          不同文件,不同程序集:加载包含被引用程序集的清单所在文件,如果不包含,CRL则根据清单文件加载适当的文件,找到类型。

      

            

10. 高级管控制(配置)

       配置文件:

        probing 元素:指定基目录下路径查找弱命名程序集。(强命名程序是codebase,并在GAC)

        configuration 工具。

      发布者策略:

          -- 忽略发布者策略  

          <publisherPolicy alppy=“no”>

          bindredirect      oldVersion   newversion

11. 修复错误的应用程序

        当控制台程序或者windows窗体程序正在一个用户账户下运行时,CRL会保持一个应用程序实际加载程序集的记录(asp.net,xml 服务没有记录),这些加载信息被累积在内存中,并在程序结束后写入磁盘目录:

    其中UserName 是该用户账户。

    目录中的ini文件,是应用程序的快照,默认5个快照。

    .Net Application Restore RollBackBlock 

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值