.Net程序集的要点

1. 程序集由程序集元数据、类型元数据、中间语言代码和资源构成。其中程序集元数据的一个重要组织部分是程序集清单,
   它描述了本程序集和引用该程序集所需要的所有信息,并列出了所有的依赖关系。清单由以下部分组成:
    (1).标识(名称、版本、文化和公钥)。公钥用于惟一地标识程序集。
    (2).属于该程序集的一个文件列表。一个程序集可以拥有一到无数个文件。
    (3).该程序集引用的程序集的列表。在程序集清单中说明了在程序集中使用的所有程序集,以及它们的版本号和公钥。
    (4).一组许可请求---运行该程序集需要的许可。
    (5).导出的类型,这些类型是在程序集引用的模块中定义的。

2. 在一个程序集中可以有不同的命名空间,一个命名空间也可以分布在多个程序集中。

3. 程序集分为私有程序集和共享程序集。在引用私有程序集时,如果程序集是个exe文件,不能用添加引用的方式引用它,
    应该把它手动拷贝到目标目录下。如果是.dll文件可以使用添加引用的方式,引用之后系统会自动在目标目录下创建该程序集的副本,
    无需手动拷贝。对于共享程序集,则需要将其安装到全局程序集缓存中,gacutil.exe工具可以在安装程序的脚本中调用。
    另外,如果查看全局程序集缓存,可以打开C:\Windows\Assembly文件夹查看。
    gacutil /l 显示全局程序集缓存中的所有程序集。
    gacutil /i mydll 把共享程序集mydll安装到全局程序集缓存中。
    gacutil /u mydll 卸载mydll程序集。
    引用共享程序集的方法和引用私有的dll程序集的方式是一样的,只是系统不会再把dll的副本拷贝到你的目标目录下,
    而是从程序集缓存中加载该程序集。

4.程序集的强名
    共享程序集最关键的是要有一个全局惟一的名称,这个名称在.NET中叫做强名。强名由以下部分组成:
    (1).程序集本身的名称
    (2).版本号。有了版本号,可以同时使用同一个程序集的不同版本。不同的版本可以同时存在,并可以同时加载到同一个进程上。
    (3).公钥,它可以保证强名称的独一无二。它也可以保证引用的程序集不会被篡改或代替。
    (4).文化。
  
    创建强名文件:
    在命令行使用sn –k mykey.snk 就可以生成一个公钥/私钥对,并把它存到snk文件中。
    私钥用来为组件进行数字签名,公钥被引用该程序集的程序验证该程序集时使用。同时,公钥也成为了程序集强名的一部分。
    具有强名的程序集,通过ildasm反编译工具查看时,可以在程序集清单中看到这个公钥。
  

5. 关于服务器组件(Enterprise Services)
    (1).服务组件需要有强名称。
    (2).应当在"全局程序集缓存"(GAC) 中注册服务组件,因为这些组件是系统级别的资源。服务器应用程序要求安装在 GAC 中,
    库应用程序则不要求这样(但是建议安装在 GAC 中)。
    (3).您可以通过延迟注册自动向 COM+ 注册服务组件,也可以通过 Regsvcs.exe 实用工具手动注册。
    自动注册(部署):
    如果启动了使用服务组件的.NET客户应用程序,就会自动配置COM+应用程序。所有派生于ServicedComponent的类都是这样。
自动部署的一个重要的缺点是,在自动部署时,客户应用程序需要有管理权限。如果客户应用程序是ASP.NET应用程序,
ASP.Net运行库一般没有管理权限。所以自动部署仅用于开发阶段。因此,对于开发阶段来说,这带来了很大方便,在每次创建了
服务组件之后,都不用手动部署。
    手工注册(部署):
    使用命令:regsvcs SimpleServer.dll就可以把程序集SimpleServer注册为一个COM+应用程序。

posted on 2007-03-24 15:23  taewind  阅读(2215)  评论(0编辑  收藏  举报

导航