C#程序集及程序集概念介绍

1、源代码-面向CLR的编译器-托管模块-(元数据&IL代码)中介绍了编译器将源文件编译成托管模块(中间语言和元数据),本文主要介绍如何将托管模块合并成程序集.html

一、程序集的基本概念

 

 

二、程序集生成的过程编程

 

 

注:缓存

(1)、清单指出程序集只有一个文件组成安全

(2)、对于只有一个托管模块,没有资源文件的项目,程序集就是托管模块.编程语言

(3)、若是须要将一组文件合并到程序集中可使用程序集连接器(AL.exe)以及其余的一些命令行选项.工具

 

三、如何构建可重用、可版本控制、可保护的组件.post

经常使用的方法是,把程序集的物理表示和逻辑表示区分开,将不多用到的类型和文件放到单独的文件中,并将这些文件做为程序集的一部分,若是运行时须要,则去下载,这样不只节省了磁盘空间,还节省了安装时间.经过程序集,能够在不一样的地方部署,同时任然将全部的文件看成一个总体来看待.url

 

四、关于程序集自描述的优势.net

在程序集的模块中,还包含与引用的程序集有关的信息(版本号、描述等等),具体以下图命令行

 

这些信息(固然远不止上图中的这点信息)使程序集可以自描述.也就是说CLR能判断为了执行程序集中的代码,程序集的直接依赖对象是什么.不须要在注册表或者Active Directory Domain Services(ADDS)中注册额外的信息.因为无需额外的信息,因此和非托管组件相比,程序集更容易部署.

 

五、将模块合并成程序集   

程序集构成简介:

1、源代码-面向CLR的编译器-托管模块-(元数据&IL代码)中介绍了C#源码经过编译器最终生成托管模块,而托管模块是标准的32位Microsoft Windows可移植执行体(PE32)文件或者标准的64位Microsoft Windows可移植执行体(PE32+)文件。

而exe文件并非只含有元数据的PE文件,它仍是程序集.程序集是一个或多个类型定义文件及资源文件的集合,

 

程序集清单文件简介:

在程序集的全部文件中2、源代码=>程序集及程序集概念介绍,有一个文件容纳了清单.清单也是一个元数据表集合(关于元数据表请参考10、元数据概述),表中主要包含做为程序集组成部分的那些文件的名称,除此以外,还描述了程序集的版本、语言文化、发布者、公开导出的类型以及构成程序集的全部文件.  

CLR操做的是程序集,CLR老是先加载"清单"中的数据,在根据"清单"中的数据来获取程序集中其余文件的名称.如下是程序集的重要特色

(1)、程序集定义了可重用的类型

(2)、程序集用一个版本号标记

(3)、程序集能够关联安全信息

除了包含清单元数据表的文件,程序集其余的单独文件并不具有上述特色.

 

类型为了进行顺利的打包、版本控制、安全保护以及使用,必须放在做为程序集一部分的模块中,程序集大多时候只有一个文件,就像前面的Program.exe文件那样,然而,程序集还可由多个文件构成,一些文件是含有元数据的PE文件,另外一些是.gif文件或.jpg这样的文件,为了便于理解,可将程序集看做一个逻辑EXE或DLL.

 

六、Microsoft引入程序集的的缘由

使用程序集将可重用类型的逻辑表示与物理表示区分开,例如,程序集可能包含多个类型,能够将经常使用类型放到一个文件中,不经常使用类型放到另外一个文件中.若是程序集须要从Internet下载并部署,那么对于含有不经常使用类型的文件,假如客户端永远不使用那些类型,该文件就永远不会下载到客户端.

 

七、配置应用程序下载程序集文件

为了配置应用程序去下载程序集文件,可在应用程序配置文件中指定codeBase元素,在codeBase元素定义的URL所指向的位置,可找到程序集的全部文件.

应用程序下载程序集的过程以下:

(1)、CLR获取codeBase元素的URL

(2)、检查机器的下载缓存,判断文件是否存在.若是是,直接加载文件.若是不是,CLR去URL指向的位置将文件下载到缓存.

(3)、若是找不到文件,CLR在运行时抛出FileNotFoundException异常.

 

八、使用多文件程序集的三点理由

(1)、不一样的类型用不一样的文件,是文件能以"增量"方式下载(如Internet下载方式).另外,将类型划分到不一样的文件中,能够对购买和安装的应用程序进行部分或分批打包/部署.

(2)、可在程序集中添加资源或数据文件.

例如,假定一个类型的做用是计算保险信息,须要访问精算表才能完成计算,这种状况下,没必要在本身的源代码中嵌入精算表,相反,可使用一个工具(好比稍后要讨论的程序集连接器AL.exe),是数据文件成为程序集的一部分.顺便说一句,数据文件能够为任意格式,只要应用程序知道如何解析便可.

(3)、程序集包含的各个类型能够用不一样的编程语言来实现.例如,一些类型能够用C#实现,一些用VB来实现,其余则用其余语言来实现,编译用C#写的类型是,编译器会生成一个一个模块,编译用VB写的类型时,编译器也会生成另外一个模块,而后使用工具将全部的模块合并成一个程序集.

好处:这样其余开发人员只知道这个程序集包含了一系列的类型信息,根本不知道、也不用知道这些类型分别是用什么语言编写的.固然可使用ILDasm.exe得到相应的IL源代码文件。而后运行ILAsm.exe.将全部的

 

九、将模块还原成单个文件

(1)、对每一个模块都运行ILDasm.exe,得到相应的IL源代码文件.

(2)、运行ILAsm.exe,将全部的IL源代码文件传给它.随后,ILAsm.exe会生成包含类型的单个文件.

 前提:生成的IL代码足够干净.

 

十、关于程序集必知的重点

(1)、程序集是进行重用、版本控制和应用安全性设置的基本单元。它容许将类型

 

 

转载自https://blog.csdn.net/weixin_33811961/article/details/86128955

相关文章
相关标签/搜索