C#或.NET中的程序集究竟是什么?

你能解释一下C#或.NET中的Assembly吗?

  1. 它从哪里开始,它在哪里结束?
  2. 我应该了解有关组件的重要信息?

程序集是你的代码的编译输出,通常是一个DLL,但是你的EXE也是一个程序集。 这是任何.NET项目的最小部署单位。

该程序集通常包含MSIL(Microsoft中间语言)中的.NET代码,该代码将在首次在给定机器上执行时被编译为本地代码(由“即时编译器”编译的“JITted”)。 该编译的代码也将被存储在程序集中,并在随后的调用中重用。

程序集还可以包含像图标,位图,string表等资源。 此外,程序集还在程序集清单中包含元数据 – 信息如版本号,强名称,文化,引用的程序集等。

在99%的情况下,一个程序集等同于磁盘上的物理文件 – 多文件程序集(一个程序集,分布在多个文件中)似乎是一个相当奇怪的边缘案例,在我5年以上的.NET开发中从未遇到过。

在多文件程序集中,DLL或EXE中只有一个程序集清单,而多个netmodule文件中只有MSIL代码。

.NET程序集

在Microsoft .NET框架中,程序集是用于部署,版本控制和安全性的部分编译的代码库。

http://www.codeguru.com/columns/csharp_learning/article.php/c5845

程序集是在编译每个.NET应用程序时由编译器自动生成的文件。 它可以是一个dynamic链接库或一个可执行文件。 它只对应用程序生成一次,在每次后续编译时,程序集都会被更新。

下面是.NET Assemblies 的另一个解释:一个迷你报价:

.NET框架由模块,程序集的概念组成,它们都存储元数据和清单信息。 一个程序集可以包含多个模块。 Visual C#只创build一个由C#编译器(csc.exe)变成程序集的模块,但程序集可以通过程序集链接器(al.exe)命令行工具将许多.NET模块链接在一起。 例如,您的每个源代码.cs文件可以被编译到一个模块中,并链接在一起形成一个程序集 – 程序集只是一个模块和资源的集合。 其中一个模块必须包含CLR要理解的程序集的清单元数据(见下文)。
….
在VS.NET中创build一个新的.exe或.dll文件后,你的文件会出现在bin文件夹中。 在记事本中打开它会发出乱码,甚至在不知道文件结构的情况下,甚至在一个hex编辑器里面,你需要一个像ildasm.exe或CFF Explorer这样的工具来expression它的意思。 大会的结构如下:

PE头
CLR标题
CLR元数据
CLR
IL代码
原生数据

当源代码由语言编译器编译时,它生成一个托pipe程序集和MSIL(MisroSoft中间语言)。 该程序集包含.dll或.exe文件 。 一个Assebmly可以是私有程序集共享程序集两种types,共享程序集存储在GAC(全局程序集caching)中,以便任何应用程序都可以引用它,而私有程序集存储在只能由一个应用程序使用的应用程序文件夹中。

程序集是一个DLL或一个EXE,它将在您发布或编译您的应用程序时创build。