您能否解释一下什么是C#或.NET中的Assembly?
- 它在哪里开始,在哪里结束?
- 我应该了解有关装配的哪些重要信息?
您能否解释一下什么是C#或.NET中的Assembly?
Answers:
程序集是代码的编译输出,通常是DLL,但EXE也是程序集。它是任何.NET项目的最小部署单元。
程序集通常包含MSIL(Microsoft中间语言)的.NET代码,该代码在首次在给定计算机上执行时将被编译为本机代码(“ JITted”-由即时编译器编译)。该编译后的代码还将存储在程序集中,并在后续调用中重用。
程序集还可以包含图标,位图,字符串表等资源。此外,程序集还包含程序集清单中的元数据-信息,例如版本号,强名,区域性,引用的程序集等。
在99%的情况下,一个程序集等于磁盘上的一个物理文件-多文件程序集(一个程序集,分布在一个以上的文件中)看起来是一个相当奇怪的情况。在过去的5年以上的.NET开发中,从未遇到过。
在多文件程序集中,在DLL或EXE中仍然只有一个程序集清单,而在多个netmodule文件中则只有MSIL代码。
在Microsoft .NET框架中,程序集是部分编译的代码库,用于部署,版本控制和安全性。
http://www.codeguru.com/columns/csharp_learning/article.php/c5845
程序集是一个文件,在成功编译每个.NET应用程序后,编译器会自动生成该文件。它可以是动态链接库或可执行文件。它仅对应用程序生成一次,并且在每次后续编译时都会更新程序集。
.NET框架由模块,程序集的概念组成,模块,程序集既存储元数据,又存储清单信息。装配体可以包含多个模块。Visual C#只能创建一个模块,而C#编译器(csc.exe)会将其转换为程序集,但是程序集可以通过程序集链接器(al.exe)命令行工具将许多.NET模块链接在一起。例如,您的每个源代码.cs文件都可以编译成一个模块,然后链接在一起以形成一个程序集-程序集只是模块和资源的集合。但是,其中一个模块;必须包含清单元数据(见下文)信息,CLR才能理解该程序集。
....
在VS.NET中创建了新的.exe或.dll后,您会看到文件出现在bin文件夹中。在记事本中打开它会产生乱码,甚至在不知道文件结构的十六进制编辑器中也一样,您需要像ildasm.exe或CFF Explorer这样的工具来使它有意义。组件的结构如下:PE标头
CLR标头
CLR元数据
CLR
IL代码本
机数据
编写程序(项目)的源代码后,将创建一个文件,该文件可能是DLL或EXE,具体取决于您的项目。对于单个项目,它仅生成一次。它具有两种类型1:-单个2:-共享或多程序单个程序集仅在单个程序中使用,而共享可用于多程序