题 什么是.NET程序集?


什么是.NET程序集?我在网上浏览,我无法理解定义。


170
2018-06-04 09:03


起源


读一读 CLR通过C#。到最后你会对它有所了解。我强烈推荐这本书。 - David Neale


答案:


用更简单的术语:可以由.NET运行时环境执行的一块(预编译)代码。 .NET程序由一个或多个程序集组成。


152
2018-06-04 09:08



像一个Jar文件对吗? - KJW
@KimJongWoo - 不,Jar文件只是一个包含已编译字节码文件的zip文件。程序集是PE(可移植可执行格式)文件(即DLL或EXE),但在概念上它们用于类似目的。 - Erik Funkenbusch
所以它就像一个 .class Java世界中的文件? - mljrg


程序集是.net应用程序的最小部署单元。 它可以是一个 DLL 或者 可执行程序
它主要有两种类型:

  1. 私人大会: dll或exe只是一个应用程序的唯一属性。它通常存储在应用程序根文件夹中

  2. 公共/共享集会: 它是一个dll,可以一次由多个应用程序使用。共享程序集存储在 GAC 即 全局程序集缓存

听起来很难?纳阿....
GAC很简单 C:\ WINDOWS \大会 您可以在其中找到PC中安装的所有软件的公共程序集/ dll的文件夹。

还有第三种也是最不为人知的装配类型: 卫星大会
Satellite Assembly仅包含静态对象,如图像和应用程序所需的其他非可执行文件。

希望这有助于读者!


221
2018-06-05 15:22



请注意,.NET 4.0的位置不同: stackoverflow.com/questions/2660355/net-4-0-has-a-new-gac-why - TrueWill
这可能会变慢。在一个文件夹获得数千个文件夹之后,Windows会慢慢地尝试遍历目录树或只是读取目录。 - Jim Michaels
@mangeshkt - 是否可以复制一个应用程序的dll并将其放入另一个应用程序的根目录中,我是否可以使用第一个应用程序的功能? - Shivam657


大会

编译应用程序时,创建的MSIL代码存储在程序集中。大会包括 这两个可执行的应用程序文件,您可以直接从Windows运行,而无需任何其他 程序(这些程序具有.exe文件扩展名)和库(具有.dll扩展名)供其他程序使用 应用。

除了包含MSIL之外,程序集还包含元信息(即有关的信息 程序集中包含的信息,也称为元数据)和可选资源(附加数据 由MSIL使用,例如声音文件和图片)。元信息使组件完全可用 自我描述。您不需要其他信息来使用程序集,这意味着您可以避免这种情况 因为未能将所需数据添加到系统注册表等等,这通常是一个问题 与其他平台一起开发。

这意味着部署应用程序通常就像将文件复制到a上的目录一样简单 远程计算机。由于目标系统上不需要其他信息,因此您可以运行 这个目录中的一个可执行文件(假设安装了.NET CLR)你很高兴。

当然,您不一定要在一个地方包含运行应用程序所需的所有内容。 您可以编写一些代码来执行多个应用程序所需的任务。在这样的情况下, 将可重用代码放在所有应用程序都可访问的位置通常很有用。在.NET中 框架,这是全局程序集缓存(GAC)。将代码放在GAC中很简单 - 您只需放置即可 包含包含此缓存的目录中的代码的程序集。


51
2018-06-04 09:07



为了更加清晰“编译应用程序时,创建的MSIL代码存储在程序集中”。只是要添加以查看程序集的内容,您可以使用ILSPY。 - Sandeep


程序集是硬盘驱动器上存储.NET Framework中的类的实际.dll文件。例如,ASP.NET Framework中包含的所有类都位于名为System.Web.dll的程序集中。

更准确地说,程序集是.NET Framework中部署,安全性和版本控制的主要单元。由于程序集可以跨多个文件,因此程序集通常称为“逻辑”dll。

注意

.NET Framework(版本2.0)包括51个程序集。

有两种类型的程序集:私有和共享。私有程序集只能由一个应用程序使用。另一方面,共享程序集可以由位于同一服务器上的所有应用程序使用。

共享程序集位于全局程序集缓存(GAC)中。例如,System.Web.dll程序集和.NET Framework附带的所有其他程序集都位于全局程序集缓存中。

注意

全局程序集缓存实际位于计算机的\ WINDOWS \ Assembly文件夹中。 \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727文件夹中的每个程序集都有一个单独的副本。第一组程序集在运行时使用,第二组在编译时使用。

在应用程序中使用程序集中包含的类之前,必须添加对程序集的引用。默认情况下,ASP.NET应用程序引用全局程序集缓存中包含的最常见程序集:

mscorlib.dll中

System.dll中

System.Configuration.dll

System.Web.dll中

System.Data.dll中

System.Web.Services.dll

system.xml.dll的

System.Drawing.dll程序

System.EnterpriseServices.dll

System.Web.Mobile.dll程序

要在.NET Framework中使用任何特定类,必须执行两项操作。首先,您的应用程序必须引用包含该类的程序集。其次,您的应用程序必须导入与该类关联的命名空间。

在大多数情况下,您不必担心引用必要的程序集,因为最常见的程序集是自动引用的。但是,如果需要使用专用程序集,则需要显式向程序集添加引用。例如,如果需要使用System.DirectoryServices命名空间中的类与Active Directory进行交互,则需要将System.DirectoryServices.dll程序集的引用添加到应用程序中。

.NET Framework SDK文档中的每个类条目都列出了与该类关联的程序集和命名空间。例如,如果在文档中查找MessageQueue类,您将发现此类位于System.Messaging.dll程序集中的System.Messaging命名空间中。

如果您使用的是Visual Web Developer,则可以通过选择菜单选项Website,Add Reference以及选择需要引用的程序集的名称来显式添加对程序集的引用。例如,添加对System.Messaging.dll程序集的引用会导致清单1.4中的Web配置文件添加到您的应用程序中。

例如。 Web.Config中

enter code here

如果您不想使用Visual Web Developer,则可以通过手动创建上述示例中的文件来添加对System.Messaging.dll程序集的引用


31
2018-06-09 06:58



真的很棒的解释.... - Ravi Kiran
接受答案的技术更多,这应该是公认的答案。 - sparkyShorts


维基百科不得不说:

在Microsoft .NET框架中,   assembly是部分编译的代码   用于部署的库,   版本控制和安全性。那里有两个   类型:流程组件(EXE)和   库程序集(DLL)。一个过程   程序集代表了一个过程   将使用库中定义的类   组件。 .NET程序集包含   CIL中的代码,通常是   从CLI语言生成,和   然后编译成机器语言   CLR的运行时及时   编译器。装配可以包括   一个或多个文件。代码文件是   称为模块。装配可以   包含多个代码模块和   因为可以使用不同的   语言来创建代码模块   技术上可以使用几个   创建一个不同的语言   部件。但Visual Studio却可以   不支持使用不同的语言   在一个集会中。

如果你确实浏览过它会有所帮助,如果你澄清你不理解的东西


8
2018-06-04 09:06





看到 这个

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


7
2018-06-04 09:06





IL代码中Class,interface,enum等的物理集合。哪个可以是.EXE或.DLL文件.EXE是可执行文件,.DLL可以在任何.net支持的语言中动态使用。


7
2018-06-04 09:54





程序集是由类型和其他资源组成的运行时单元。程序集中的所有类型都具有相同的版本号。

通常,一个程序集只有一个名称空间,并由一个程序使用。但它可以跨越几个名称空间。此外,一个名称空间可以分布在多个程序集中在大型设计中,组件可以由多个文件组成,这些文件由清单(即内容表)保持在一起。

在C#中,程序集是.Net应用程序的最小部署。它可以是dll或exe.It有两种类型:1。私有程序集2.公共/共享程序集


6
2018-03-25 07:28





MSDN有一个 很好的解释

程序集是.NET Framework应用程序的构建块;他们   形成基本单位   部署,版本控制,重用,   激活范围和安全性   权限。装配是一个   收集类型和资源   是为了共同努力而形成的   逻辑单元功能。一个   汇编提供了通用语言   运行时所需的信息   要了解类型实现。   对于运行时,类型不存在   在集会的背景之外。


5
2018-06-04 09:06