强命名程序集

强命名程序集的缘由:

      目前Windows中出现的DLL Hell问题(两个不同的公司可能开发处具有相同名称的程序集,如果将相同名称的程序集放置到同一个目录下,则会出现程序集覆盖现象,最后安装的程序集会覆盖前面的程序集,从而可能导致应用序不能正常运行)。由此看来,仅靠名称来区分程序集是不足够的。CLR采取了强命名程序集的方式来唯一的表示程序集。强命名程序集包含四个标识:名称,版本号,语言文化标识和一个共有/私有密钥对。

两种程序集/两种部署方式:

.Net支持两种程序集:弱命名程序集和强命名程序集(注:.Net框架中没有弱命名程序集,只是为了和强命名程序集相对应而已)。弱命名程序集和强命名程序集在结构上是相同的。他们都采用PE文件格式,包含PE表头,CLR表头,元数据和清单表。区别在于:强命名程序集拥有一个发布者的公钥/私钥签名对,他们用于唯一的标识程序集的发布者。通过公钥/私钥对,我们可以对程序集进行唯一的标识,安全策略和版本策略。

程序集的部署方式也有两种:私有部署和全局部署。私有部署方式是:把程序集部署到应用程序的相关目录下。弱命名程序集只能进行私有部署。全局部署方式是:把程序集部署到CLR知道的地方,CLR可以到这个地方查找到需要的程序集。强命名程序集可以进行两种部署。

程序集种类                     是否可以进行私有部署            是否可以进行全局部署                                                     弱命名程序集                 是                                                否                                                                                           

强命名程序集                 是                                                是

如何创建强命名程序集:

1:使用强命名工具(Strong Name Utility)产生密钥对。

    例如:SN -K MyCompany.keys

2:在源代码Assembly.cs中设置AssemblyKeyFile属性

   例如:[assembly:AssemblyKeyFile("MyCompany.keys");

3:重新编译,产生的程序集就是经过签名后的程序集了。

如何部署强命名程序集(全局部署):

如果希望一个程序集被多个应用程序访问,则程序集必须被放到一个CLR已经确知的目录下,从而能够自动到该目录找到该程序集。这个确知的目录称作全局程序集缓存(Global Assembly Cache),通常位于:C/Wndows/Assembly下。

我们可以使用工具GACUtil.exe,指定/i命令开关将一个程序集安装到GAC中。同样可以使用/u命令开关将一个程序集从GAC中卸载。注意:安装的程序集必须是强命名程序集。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值