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

时间:2009-09-01 12:34:49

标签: c# .net assemblies

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

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

8 个答案:

答案 0 :(得分:88)

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

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

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

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

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

答案 1 :(得分:10)

.NET assembly

  

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

答案 2 :(得分:7)

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

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

答案 3 :(得分:3)

Here's构建.NET程序集的另一种解释,一个迷你引用:

  

.NET框架包含   模块,组件的概念,其中   存储元数据和清单   信息。装配可以包含   多个模块。 Visual C#只有   创建一个转动的模块   通过C#编译器进入程序集   (csc.exe),但程序集可以链接   许多.NET模块通过   程序集链接器(al.exe)命令行   工具。例如你的每个来源   代码.cs文件可以编译成   一个模块并链接在一起形成   装配 - 装配只是一个   模块和资源的集合。   然而,其中一个模块必须   包含清单元数据(见下文)   装配的信息   CLR理解。
  ....
  创建了一个新的.exe或.dll   在VS.NET中,您会看到您的文件出现   在bin文件夹中。打开它   记事本会发出乱码,或者   甚至在十六进制编辑器中   不知道的结构   文件,你需要一个像ildasm.exe这样的工具   或CFF资源管理者从中获取意义   它。组件的结构是   如下:

     

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

程序集是逻辑单元的集合。逻辑单元是指构建应用程序并使用.Net框架进行部署所需的类型和资源。基本上,程序集是Exe和DLL的集合。它是可移植且可执行的。

答案 6 :(得分:0)

答案是为了立即抓住。

  

简单地说,它是包含类和其他文件(如果有)的已编译项目。也就是说,一个   解决方案是 assembly

或更严格地说,

  

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

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

编译项目时,结果为 DLL EXE

enter image description here enter image description here enter image description here

答案 7 :(得分:-1)

在编写程序(项目)的源代码之后,将创建一个文件,该文件可能是DLL或EXE,具体取决于您的项目。对于单个项目,它仅生成一次。它有两种类型 1:-单身 2:-共享或多程序 单个程序集只能在单个程序中使用,而共享程序可以用于多程序