C#程序集

程序集:
程序集(assembly)是包含编译好的、面向.NET Framework的代码的逻辑单元。
程序集是完全自描述性的,它是一个逻辑单元而不是物理单元,可以存储在多个文件中(动态程序集存储在内存中,而不是存储在文件中)。如果一个程序集存储在多个文件中,其中就会有一个包含入口点的主文件,该文件描述了程序集中的其他文件。可执行代码和库代码使用相同的程序集结构。唯一的区别是可执行的程序集包含一个主程序入口点,而库程序集不包含。程序集的一个重要特征是它们包含的元数据描述了对应代码中定义的类型和方法。程序集也包含描述程序集本身的元数据,这种程序集元数据包含在一个称为“清单(manifest)”的区域中,可以检查程序集的版本及其完整性。
ildasm是一个基于Windows的实用程序,可以用于检查程序集的内容,包括程序集清单和元数据。
程序集包含程序的元数据,表示调用给定程序集中的代码的应用程序或其他程序集不需要引用注册表或其他数据源,就能确定如何使用该程序集。这与以前的COM有很大的区别,以前,组件和接口的GUID必须从注册表中获取,在某些情况下,方法和属性的详细信息也需要从类型库中读取。把数据分散在3个以上的不同位置上,可能会出现信息不同步的情况,从而妨碍其他软件成功地使用该组件。有了程序集后,就不会发生这种情况,因为所有的元数据都与程序的可执行指令存储在一起。即使程序集存储在几个文件中,数据也不会出现不同步的问题。这是因为包含程序集入口的文件也存储了其他文件的细节、散列和内容,如果一个文件被替换,或者被复改,系统肯定会检测出来,并拒绝加载程序集。程序集有两种类型:私有程序集和共享程序集
私有程序集:
私有程序集是最简单的一种程序集类型。私有程序集一般附带在某个软件上,且只能用于该软件。附带私有程序集的常见情况是,以可执行文件或许多库的方式提供应用程序,这些库包含的代码只能用于该应用程序。系统可以保证私有程序集不被其他软件使用,因为应用程序只能加载位于主执行文件所在文件夹或其子文件夹中的私有程序集。用户一般会希望把商用软件安装在它自己的目录下,这样软件包不存在覆盖、修改或在无意间加载另一个软件包的私有程序集的风险。私有程序集只能用于自己的软件包,这样,用户对什么软件使用它们就有了更大的控制权。因此,不需要采取安全措施,因为这没有其他商用软件用某个新版本的程序集覆盖原来的私有程序集的风险(但软件是专门执行怀有恶意的损害性操作的情况除外)。名称也不会有冲突。如果私有程序集中的类正巧与另一个人的私有程序集中的类同名,是不会有问题的,因为给定的应用程序只能使用它自己的一组私有程序集。因为私有程序集是完全自包含的,所以部署它的过程就很简单。只需要把相应的文件放在文件系统的对应文件夹中即可(不需要注册表项),这个过程称为“0影响(xcopy)安装”。
共享程序集:
共享程序集是其他应用程序可以使用的公共库。因为其他软件可以访问共享程序集,所以需要采取一定的保护措施来防止以下风险:.名称冲突,另一个公司的共享程序集执行的类型与自己的共享程序集中的类型同名。因为客户端代码理论上可以同时访问这些程序集,所以这是一个严重的问题。.程序集被同一个程序集的不同版本覆盖一新版本与某些已有的客户端代码不兼容。这些问题的解决方法是把共享程序集放在文件系统的一个特定的子目录树中,称为全局程序集缓存(GAC)。与私有程序集不同,不能简单地把共享程序集复制到对应的文件夹中,而需要专门安装到缓存中,可以用许多.NET工具完成这个过程,其中包含对程序集的检查、在程序集缓存中设置一个小的文件夹层次结构,以确保程序集的完整性。为了避免名称冲突,应根据私钥加密法为共享程序集指定一个名称(而对于私有程序集,只需要指定与其主文件名相同的名称即可)。该名称称为强名(strong name),并保证其唯一性,它必须由要引用共享程序集的应用程序来引用。与覆盖程序集的风险相关的问题,可以通过在程序集清单中指定版本信息来解决,也可以通过同时安装来解决。
反射:
因为程序集存储了元数据,包括在程序集中定义的所有类型和这些类型的成员的细节,所以可以编程访问这些元数据。这个技术称为反射,第15章详细介绍了它们。该技术很有趣,因为它表示托管代码实际上可以检查其他托管代码,甚至检查它自己,以确定该代码的信息。它们常常用于获取特性的详细信息,也可以把反射用于其他目的,例如作为实例化类或调用方法的一种间接方式(前提是将这些类或方法的名称指定为字符串)。这样,就可以选择类来实例化方法,以便在运行时调用,而不是在编译时调用,例如根据用户的输入来调用(动态绑定)。
并行编程:
.NET Framework允许利用目前出现的所有多核处理器。并行计算能力提供了分隔工作活动、并在多个处理器上运行这些活动的方式。现在可用的、新的并行编程API使得编写安全的多线程代码变得十分简单,但要注意,仍需要考虑竞态条件和死锁。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值