程序集的创建、内容以及使用过程(基于Mono)
一、定义:
在.NET Framework中,一个程序集(Assembly)是一个可执行文件(.exe)或一个动态链接库(.dll),它包含了一个或多个代码模块(Module),以及相关的资源文件和元数据。程序集是.NET应用程序的基本部署单元,可以包含一个或多个命名空间、类、接口等代码组件。可以说一个程序集包含了一个代码组,即程序集中的所有代码组件共同构成了一个逻辑上的代码组。
总的来说,一个程序集可以看作是一个代码组的集合,它提供了一种组织和部署代码的方式,同时也定义了代码组件之间的访问规则和边界。程序集的概念是.NET Framework中重要的概念,对于代码的组织、部署和管理都起着关键作用。
二、创建:
在编译器上,使用编程语言 ( 如 c# ) 完成代码编程后,通过编译器将编程代码编译为可执行的文件(.exe)或一个动态链接库(.dll) 即程序集。
三、内容:
-
ILCode(Intermediate Language Code):程序集中包含了编译后的中间语言代码,也称为IL代码。IL代码是一种与平台无关的中间代码,需要在运行时通过.NET运行时环境(Common Language Runtime,CLR)进行即时编译(Just-In-Time Compilation)成本机代码,以便在特定平台上执行。
-
元数据(Metadata):程序集中还包含了元数据,用于描述程序集中的类型、成员、引用等信息。元数据包括类型的定义、方法的签名、属性的特性等,提供了CLR在运行时进行类型检查、内存管理和安全性检查所需的信息。
-
清单(Manifest):程序集的清单是一个特殊的元数据文件,包含了程序集的版本信息、依赖关系、资源文件列表等内容。清单提供了程序集的元数据信息,使得CLR能够正确加载和执行程序集。
-
资源文件(Resources):程序集中可以包含各种资源文件,如图像、文本、声音等。这些资源文件可以被程序集中的代码访问和使用,用于支持应用程序的功能和界面。
-
引用信息(References):程序集中还包含了对其他程序集的引用信息,用于在运行时解析和加载依赖的程序集。通过引用信息,程序集可以调用其他程序集中的类型和成员,实现代码的复用和扩展。
一个程序集以动态链接库(dll)为例:有一个.dll后缀文件、有一个.mdb后缀文件
.dll:
包含编译后的ILCode(.NET框架中一种与平台无关的中间语言,类似于一种高级的汇编语言)、元数据和程序集清单等信息的动态链接库文件,用于在.NET应用程序中引用和调用程序集中的类型和成员
.mdb:
是调试符号文件,包含了调试信息,用于在调试器中进行源代码级别的调试。(通过将.dll文件和.mdb文件一起部署,可以在调试时提供更好的调试体验,因为调试器可以使用.mdb文件中的调试信息来映射到源代码,从而方便开发人员进行调试和排错。)
四、使用
由编译器生成的动态链接库( .dll),在 .NET框架实现在多种移动平台上运行起着重要的作用。其中由源码组成的ILCode不能直接在机器(移动平台:手机、电脑、、)上使用,需要在运行时通过.NET平台的CLR(Common Language Runtime)进行即时编译(Just-In-Time Compilation),将ILcode转换为特定平台的机器码,然后在目标平台上执行。
具体来说,程序集中包含了IL代码、元数据和清单等信息,CLR在运行时加载程序集,解析其中的元数据,根据需要将IL代码编译成本机代码。CLR负责管理程序集的加载、执行、内存管理和安全性检查等任务,确保.NET应用程序能够在不同平台上正确运行。
因此,程序集和机器码之间的关系是通过CLR实现的,程序集中存储了中间语言代码和元数据,CLR负责将IL代码编译成机器码,并在目标平台上执行。这种机制使得.NET应用程序具有跨平台性和与平台无关性,同时提供了更高的安全性和可移植性。
五、其他介绍
CLR(Common Language Runtime)是.NET 框架中是一部分,它包含了许多功能,其中包括即时编译(JIT)器。CLR中的JIT编译器负责将.NET程序集中的中间语言代码(IL代码)转换为本地机器代码,以便在特定平台上执行。因此,CLR中的JIT编译器是.NET应用程序在运行时将IL代码编译成本地代码的关键组件之一。