zoukankan      html  css  js  c++  java
  • 如何强命名程序集(转)

    强命名程序集的缘由

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

    强命名程序集包含四个标识:名称,版本号,语言文化标识和一个共有/私有密钥对。

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

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

    程序集的部署方式也有两种:私有部署和全局部署。

    私有部署方式是:把程序集部署到应用程序的相关目录下。弱命名程序集只能进行私有部署。

    全局部署方式是:把程序集部署到CLR知道的地方,CLR可以到这个地方查找到需要的程序集。强命名程序集可以进行两种部署。

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

    弱命名程序集                   是                                     否   

    强命名程序集                   是                                     是

    为什么要生成强命程序集?

    命名程序集可以防止程序集被篡改,强命名的程序集可以部署到GAC中,共享多个版本的程序集。如果希望一个程序集被多个应用程序访问,则程序集必须被放到一个CLR已经确知的目录下,从而能够自动到该目录找到该程序集。这个确知的目录称作全局程序集缓存(Global Assembly Cache),通常位于:C\Wndows\Assembly下。

    怎么样生成强命名程序集?

    1.生成密钥

    运行Visual Studio .NET 2003 命令提示行

    输入:存放密钥的路径>sn -k 密钥文件名

    例如:D:\>sn -k mykey.key 

    2.使用密钥

    把密钥文件放到解决方案的根目录下,打开解决方案,修改要强命名项目的AssemblyInfo.cs文件

    [assembly: AssemblyVersion("1.0.0.1")]     //强命名程序集一般都指定版本号

    [assembly: AssemblyDelaySign(false)]     //是否要延迟签名 false:不延迟签名 true:延迟签名

    [assembly: AssemblyKeyFile("mykey.key")]    //密钥文件的路径

    3.生成强名称程序集

    编译解决方案,这样生成的程序集就是强命名的程序集了

    4.部署强命名程序集到GAC中

    (我们可以使用工具GACUtil.exe,指定/i命令开关将一个程序集安装到GAC中。

    同样可以使用/u命令开关将一个程序集从GAC中卸载)

    运行Visual Studio .NET 2003 命令提示行

    输入:任意路径>gacutil /i 强命名程序所在的绝对路径

    例如:D:\>gacutil /i E:\我的默认网站\myweb\myAssembly.dll 

    注意:只有强命名的程序集才可以部署到GAC中(GAC:全局程序集缓冲)


    本文参考地址1:http://blog.csdn.net/lchunl9707/archive/2009/06/16/4274185.aspx

    本文参考地址2:http://blog.csdn.net/calm_agan/archive/2006/01/07/572716.aspx

  • 相关阅读:
    基于spring mvc的图片验证码实现
    spring mvc controller间跳转 重定向 传参
    fedora23安装配置记录
    Qt移动开发大部分的场景基本上实现没问题,listview支持刷新3000~5000的实时数据没有任何压力(QML的几个大型应用)
    经过了这么多年的发展,软件开发行业已经完全渗入了整个社会
    Qt云服务/云计算平台QTC(Qt Cloud Services)入门(0)
    Windows下用VC与QT编译MPI程序入门
    VS2008下QT整合OGRE
    表现层及ASP.NET MVC介绍(二)
    DDD分层架构的进化
  • 原文地址:https://www.cnblogs.com/beijia/p/Assembly.html
Copyright © 2011-2022 走看看