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

Roe*_*ler 83 .net c# assemblies

你能解释一下C#或.NET中的程序集是什么吗?

  1. 它从哪里开始,它在哪里结束?
  2. 我应该了解哪些关于装配的重要信息?

mar*_*c_s 98

程序集是代码的编译输出,通常是DLL,但EXE也是程序集.它是任何.NET项目的最小部署单元.

该程序集通常包含MSIL(Microsoft中间语言)中的.NET代码,该代码将在第一次在给定计算机上执行时编译为本机代码("JITted" - 由Just-In-Time编译器编译).该编译的代码也将存储在程序集中,并在后续调用中重用.

程序集还可以包含图标,位图,字符串表等资源.此外,程序集还包含程序集清单中的元数据 - 诸如版本号,强名称,文化,引用程序集等信息.

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

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

  • 程序集中非常重要的一点是程序集清单中的元数据.清单包含版本,强名称,文化,引用程序集等信息.在多文件程序集中,dll或exe中仍然只有一个程序集清单,而多个.netmodule文件中的MSIL代码.基本上,程序集是> net中的最小部署单位 (4认同)
  • "该编译的代码也将存储在程序集中,并在后续调用中重用." 这是误导和/或不太清楚.没有编译的代码"存储"在程序集中.我想你可能指的是每个方法/函数在首次被调用时被"jitted"到本机代码的方式.然后,当程序集在内存中时,调用该方法的本机代码版本.如果卸载程序集并稍后重新加载,则jit进程将再次发生.当然,这假设您没有使用NGEN将程序集预编译为本机代码(不推荐). (3认同)

小智 12

.NET程序集

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


Rag*_*hav 7

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

程序集是在成功编译每个.NET应用程序时由编译器自动生成的文件.它可以是动态链接库或可执行文件.它仅为应用程序生成一次,并且在每次后续编译时,程序集都会更新.

  • 程序集与包含它们的文件不同。 (2认同)

snr*_*snr 6

答案是为了立即掌握。

简而言之,它是涉及您的类和其他文件(如果有)的编译项目。也就是说,解决方案中的每个项目都是assembly

或者从技术上讲,

一个组件是其中类型被存储在flesystem。程序集是一种部署代码的机制。例如,System.Data.dll 程序集包含用于管理数据的类型。要在其他程序集中使用类型,必须引用它们。-来源

我们怎么知道?如果您在解决方案下查看项目的属性查看您可以看到以下图像。

编译项目时,结果是DLLEXE

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明


Chr*_*s S 5

下面是对 .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 代码
本机数据