clr via c# 3 读书笔记(2):第1章 clr执行模型 — 1.2 将托管模块组合为程序集 -凯发k8官方网
实际上,clr直接打交道的是程序集,而不是模块。程序集是一个抽象的概念,首先,它是一个或多个模块或资源文件的逻辑组合(即程序集由多个模块和资源文件组成)。其次,它是复用、安全、版本的最小单元。根据所选择的编译器和工具的不同,可以生成单一文件或多个文件的程序集。在clr世界里,程序集就是我们称作组件(component)的东西。
程序集提供了一种方式,将一组文件看作一个单独的实体。
下图解释了什么是程序集。
在该图中,使用工具对托管模块和资源(或数据)文件进行处理。该工具生成了单一的pe32( )文件,代表文件的逻辑组合。该pe32( )文件包含一个叫做manifest的数据块。manifest是另一个元数据表的集合。这些表描述了组成程序集的文件、由这些文件所实现的公有导出类型、以及与程序集相关的资源或数据文件。
默认情况下,编译器会将产生的托管模块转换为一个程序集。也就是说,c#编译器生成的是一个包含了manifest的托管模块。其中的manifest表明程序集仅包含一个文件。对于仅包含一个托管模块且没有资源(或数据)文件的项目来说,程序集就是托管模块,并且在创建过程中,不需要执行其他操作。如果希望将一组文件组合到一个程序集之中,需要使用更多的工具(assembly linker,al.exe)及其命令行选项。
对于一个可重用、可部署(securable)、可实施版本管理(versionable)的组件来说,程序集可以将逻辑表示和物理表示相分离(解耦)。如何将代码和资源放置于不同的文件则完全取决于我们自己。
一个程序集的模块还包含被引用的程序集的一些信息(如其版本号)。这些信息使程序集能够自描述(self-discribing)。换句话说,为了执行程序集中的代码,clr可以确定程序集的直接依赖。(the clr can determine the assembly’s immediate dependencies in order for code in the assembly to execute)不需要再在注册表或活动目录领域服务(active directory domain services)中获取更多的信息。由于不再需要额外的信息,因此部署程序集比部署非托管组件要容易得多。
总结
以上是凯发k8官方网为你收集整理的clr via c# 3 读书笔记(2):第1章 clr执行模型 — 1.2 将托管模块组合为程序集的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇:
- 下一篇: