您的位置:首页 > 编程语言 > C#

CLR via C# FOURTH EDITION (二) 将托管模块合并成程序集

2014-10-27 21:48 225 查看
将托管模块合并成程序集

CLR实际上并不与模块一起工作,它和程序集一起工作。程序集是一个抽象的概念,一开始很难去掌握。首先,程序集是由一个多个模块,或资源文件的逻辑分组。第二,程序集是重用,安全性,和版本控制的最小单位。根据你对编译器和工具的选择,你可以生成单文件程序集或者多文件程序集。在CLR的世界中,程序集就是我们所说的组件(component)。

在第二章,我会研究程序集的细节,所以我不想在这儿花太多时间。这里我只想让你意识到,程序集这个额外的概念可以把一组文件当做一个单一的实体处理。

图1-2可以帮助解释程序集。在这张图中,一些托管模块和资源(或数据)文件由工具处理。这个工具生成单个的PE32(+)文件来表示文件的逻辑性分组。实际上这个PE32(+)文件包含了一个数据块叫做清单(manifest)。清单是由元数据表格组成的另一种简单的集合。这些表格描述了组成程序集的文件,由程序集中的文件实现的公开导出的类型(即程序集中的public修饰的数据)和与程序集相关联的资源或数据文件。



默认的,编译器事实上工作时会把生成的托管模块转变成程序集;that is,C#编译器输出的托管模块包含了一个清单。清单指示了程序集只由一个文件组成。所以,对于一个只有一个托管模块而且没有资源(或数据)文件的项目,程序集就是托管模块,而且在生成过程中你不需要执行额外的步骤。如果你想要把一系列文件组合到一个程序集中,你需要了解更多的工具(比如assembly
linker,AL.exe)和他们的命令行设置。我会在第二章解释这些工具和设置。

一个程序集允许你把一个可重用的,可保护的,可版本控制的组件的逻辑概念和物理概念。怎样把你的代码和资源分区到不同的文件中完全取决于你。比如,可以把几乎不同的类型和资源放到程序集中的一个单独文件中。根据运行时的需求这个文件可以从网上下载。如果这个文件永远不需要,它们就永远不会被下载,节约了磁盘空间和安装时间。程序集运行你分开部署文件,同时仍然把所有文件当做一个文件对待。

一个程序集的模块中也包含了引用程序集的相关信息(也包含了它们的版本号)。这些信息让程序集可以自描述。In other word, CLR可以根据程序集运行的代码定义程序集的直接依赖对象(immediate dependencies)。在注册表中和ADDS(Active Directory Domain Services)中不需要另外的信息。因为不需要额外的信息,部署程序集要比部署非托管组件方便的多。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: