任何人都能回答以下问题吗?我正在使用c#语言。
请帮我解决这些问题。
发布于 2013-03-19 12:58:40
1 --程序集可以是单个.DLL或.EXE文件,但并非所有.DLLs和.EXEs都是程序集。程序集特定于.NET框架。.EXE和.DLL程序集都可以由.NET应用程序引用或加载。
2 --程序集清单只是包含描述程序集的元数据的程序集的一部分。来自MSDN程序集清单:
如果需要更改与特定程序集关联的元数据,可以从代码中添加和更改程序集清单的某些方面。程序集清单可以作为自己的物理文件存储,但仍被视为程序集的一部分。
3 --程序集由CIL代码、描述CIL代码定义的类型的元数据、描述程序集的元数据清单和其他资源(如程序集所需的静态映像)组成。因此,程序集清单与元数据一样,只是程序集的一部分。
4 --几乎。程序集= MSIL代码+程序集清单+类型元数据+资源.
程序集可以编译为.EXE或.DLL文件,但也可以由多个文件组成。
发布于 2013-03-20 18:35:26
让我们从这些概念开始(简单地),然后我们就有了答案。
编译器是语法检查器和“正确的代码”分析器。在.Net平台中,无论使用哪个编译器,结果都是一个托管模块。托管模块是标准的32位Microsoft可移植可执行文件(PE32)或要求CLR执行的标准64位可移植可执行文件(PE32+)。

IL代码代码编译器在编译源代码时产生的。在运行时,CLR将IL编译为本机CPU指令。
元数据每个托管模块都包含元数据表。表有两种主要类型:描述源代码中定义的类型和成员的表和描述源代码引用的类型和成员的表。
程序集是一个抽象的概念,最初很难理解。首先,程序集是一个或多个模块或资源文件的逻辑分组。其次,程序集是重用、安全和版本控制的最小单元。根据您使用编译器或工具所做的选择,您可以生成一个单文件或多文件程序集。在CLR世界中,程序集就是我们所称的组件。
( CLR实际上并不适用于模块,而是用于程序集)
Assembly 是程序集的部分,它描述程序集中的文件集

程序集允许您将可重用、安全、可版本的组件的逻辑和物理概念解耦。程序集的模块还包括有关引用程序集的信息(包括其版本号)。此信息使程序集自描述。换句话说,CLR可以确定程序集的直接依赖关系,以便执行程序集中的代码。
实际上,在使用C#编译器时,会使用编译器选项来生成.DLL或.EXE,因此DLL和EXE在程序集概念中是相等的组件。
所以我们会有
正确,程序集是手动DDL或EXE文件。
2-不,程序集清单只是程序集的一部分。
3-在答复中说明
4-托管.DLL或.EXE =程序集(包含元数据+汇编语言+ MSIL代码)
图片和一些来自杰弗里·里克特的引号
发布于 2016-04-11 10:38:54
摘自Pro C# 5和.NET 4.5 Framework一书
当使用.NET感知编译器创建*.dll或*.exe时,二进制blob被称为程序集。
程序集包含MSIL代码,在概念上类似于Java字节码,因为它在绝对必要之前不会编译成特定于平台的指令。通常,“绝对必要”是指在.NET运行时引用一段MSIL指令(例如方法实现)以供使用。
除了MSIL指令外,程序集还包含元数据,该元数据生动详细地描述了二进制文件中每种“类型”的特征。例如,如果您有一个名为SportsCar的类,则类型元数据描述诸如SportsCar的基类(如果有的话)由SportsCar实现的详细信息,以及SportsCar类型支持的每个成员的完整描述。.NET元数据始终存在于程序集中,并由.NET感知的语言编译器自动生成。
最后,除了MSIL和类型元数据之外,还使用元数据来描述程序集本身,它被正式称为清单。清单包含有关程序集当前版本的信息、区域性信息(用于本地化字符串和图像资源)以及正确执行所需的所有外部引用程序集的列表。
https://stackoverflow.com/questions/15498818
复制相似问题