程序集

 

目录

一、定义... 2

二、程序集和一般的dllexe有什么区别?... 2

三、元数据... 2

四、为什么要使用程序集... 2

五、如何解决DLL Hell 2

六、程序集结构... 3

七、模块和程序集... 3

八、命名空间和程序集... 3

九、查看程序集... 3

十、应用程序... 3

十一、理解加密技术... 4

十二、私有程序集... 4

十三、共享程序集... 4

1、创建共享程序集... 4

2、全局程序集缓存(GAC... 6

3、将共享程序集放入GAC... 6

4、使用共享程序集... 6

正文

一、定义

l         通常扩展名是EXEDLL.NET可执行程序称为程序集。

二、程序集和一般的dllexe有什么区别?

虽然扩展名相同,但.net程序集包含了元数据。

三、元数据

l         元数据描述了程序集中定义的所有类型及其成员的信息。例如方法、属性、事件和字段。

l         清单是数据集元数据的一部分,包含如下信息:

u       程序集的名称、版本、公钥和文化

u       属于该程序集的文件(如某个程序集包含三个文件:1个程序集和2个模块)

u       引用程序集(该程序集引用的其他程序集)

u       权限集

u       导出类型

四、为什么要使用程序集

.NET程序集是为以前内部DLLDLL Hell提供的解决方案。

DLL HellDLL地狱)简介

新安装的应用程序重写了另一个应用程序使用的 DLL,会发生应用程序中断的情况,因为安装程序不能正确地检查版本,或者版本设置不正确

假如某电脑上安装了一个应用程序A,该应用程序A使用X.DLL,一直正常使用。突然有一天该电脑上安装了一个新的应用程序B,该应用程序B中也使用X.DLL。安装应用程序B后,覆盖了应用程序AX.DLL,因此应用程序A不能够正常使用。

五、如何解决DLL Hell

l         程序集可以是共享的,也可以是私有的。

l         私有程序集专门由您的应用程序使用,其他应用程序不能使用。私有程序集存储在与可执行文件相同的文件夹中,从而便于部署----不存在上述的问题。

l         共享程序集,多个应用程序可以同时使用这个程序集。为了防止DLL地狱,使用共享程序集有一些限制。首先,所有共享程序集都存储在称为全局程序集缓存(GAC)的特殊位置。其次,每个共享程序集必须有用于唯一标识自身的强名,从而其他程序集不会有与其相同的名称。详见全局程序集缓存(GAC

六、程序集结构

组成部分

说明

程序集元数据

描述程序集和它的内容。

类型元数据

定义从程序集导出的所有类型和方法。

MSIL(中间语言)代码

包含编译器编译的MSIL代码。

资源

包含应用程序使用的图标、图像、文本字符串以及其他资源

七、模块和程序集

l         可以将程序集拆分成多个模块,然后分别编译每个模块,接下来可以将这些模块编译成程序集。

l         模块的作用:

u  模块可以更快的启动程序集,因为并不是所有的类都在一个文件中。模块只在需要时加载。

u  使用模块的另一个原因是,每个模块可以使用不同的语言编写。

八、命名空间和程序集

命名空间完全独立于程序集。在一个程序集中可以有不同的命名空间,一个命名空间也可以分布在多个程序集中。

九、查看程序集

使用命令行工具ildasm来查看。(Visual Studio 2008 命令提示)

十、应用程序域

.NET之前的技术中,进程用作应用程序之间的一个独立而安全的边界。在.NET结构中,应用程序有一个新的边界:应用程序域。多个应用程序可以运行在同一个进程的多个应用程序域中。

十一、理解加密技术

l         在加密技术的领域中,有两种主要类型的加密和解密算法:对称(私钥加密)和非对称(公钥加密)。

l         私钥加密:使用相同的密钥加密和解密需要加密的消息。

l         公钥加密:需要生成由私钥和公钥组成的密钥对。密钥对工作方式:只可以使用对应的私钥解密通过公钥加密的消息。

十二、私有程序集

私有程序集位于应用程序所在的目录下,或其子目录中。私有程序集是构建程序集的一般方式,特别是应用程序和组件在同一个公司中建立时,就更是如此。

十三、共享程序集

1、创建共享程序集

  1)、创建强名

A.        强名由下列项组成

        程序集本身的名称

        版本号

        公钥(保证强名是独一无二的)

        文化

B.        使用vs创建强名

项目属性à签名à选择为程序集签名à新建(图1à指定存储密钥对的文件名称(例如KeyFile.snk)(图2),也可以使用密码保护该文件。

1

 

2

2)、版本化

使用vs编辑程序集版本

编辑项目的Properties下的AssemblyInfo.cs文件。该文件的AssemblyVersion属性标识程序集的版本号。如图3

 

3

  3)、生成程序集

生成项目,以使vs2008生成共享程序集,并且使用强名签名该程序集。

2、全局程序集缓存(GAC

GAC.NET程序集的中央储存库,所有应用程序可以共享该存储库。将共享程序集放入GAC有很多原因,其中一些原因如下:

1)、安全性:要求使用加密密钥签名存储在GAC中的程序集。这就使人很难篡改您的程序集,例如恶意代码替换或插入您的共享程序集。

2)、版本管理:相同程序集的多个版本都可以驻留在GAC中,从而每个应用程序可以查找并使用程序集的特定版本。这就可以帮助避免发生DLL Hell问题。

3)、更快速的加载:程序集第一次安装到GAC时会被验证,从而不需要在每次从GAC加载时都对其进行验证。

GAC位于<windows_derectory>/Assembly下,在大多数情况下是C:/Windows/Assembly

3、将共享程序集放入GAC

       将程序集拖放到<windows_derectory>/Assembly下(也可以使用命令:gacutil /i DLLName.DLL)。如果正常,应该可以在目录下看到程序集。右键属性可以查看程序集的信息。如图4

       4

4、使用共享程序集

       新建一个项目ProjectA,以引用私有程序集的方式引用共有程序集(假如为SharedDemo.DLL)(添加引用)。生成ProjectA,在bin目录下不会找到SharedDemo.DLL,因为它是共享程序集。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值