什么是.NET程序集?

192 .net c#

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

小智 241

程序集是.net应用程序的最小部署单元.它可以是dllexe.
它主要有两种类型:

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

  2. 公共/共享程序集: 它是一个可以由多个应用程序一次使用的DLL.共享程序集存储在GAC全局程序集缓存中.

听起来很难?Naa ....
GAC只是C:\ Windows\Assembly文件夹,您可以在其中找到PC中安装的所有软件的公共程序集/ dll.

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

希望这有助于读者!

  • 请注意,.NET 4.0的位置不同:http://stackoverflow.com/questions/2660355/net-4-0-has-a-new-gac-why (3认同)

Adr*_*ore 166

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

  • @KimJongWoo - 不,Jar文件只是一个包含已编译字节码文件的zip文件.程序集是PE(可移植可执行格式)文件(即DLL或EXE),但从概念上讲它们用于类似的目的. (30认同)

Sal*_*leh 57

大会

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

除了包含MSIL之外,程序集还包括元信息(即有关程序集中包含的信息的信息,也称为元数据)和可选资源(MSIL使用的其他数据,如声音文件和图片).元信息使程序集能够完全自我描述.您不需要其他信息来使用程序集,这意味着您可以避免无法将所需数据添加到系统注册表等情况,这在使用其他平台进行开发时通常会出现问题.

这意味着部署应用程序通常就像将文件复制到远程计算机上的目录一样简单.因为目标系统上不需要其他信息,所以您只需从该目录运行可执行文件(假设安装了.NET CLR)就可以了.

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


Hun*_* Vu 33

程序集是硬盘驱动器上存储.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
Run Code Online (Sandbox Code Playgroud)

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


Chr*_*ers 8

维基百科不得不说:

在Microsoft .NET框架中,程序集是部分编译的代码库,用于部署,版本控制和安全性.有两种类型:进程程序集(EXE)和库程序集(DLL).流程程序集表示将使用库程序集中定义的类的流程..NET程序集包含CIL中的代码,通常由CLI语言生成,然后由CLR实时编译器在运行时编译为机器语言.程序集可以包含一个或多个文件.代码文件称为模块.程序集可以包含多个代码模块,并且由于可以使用不同的语言来创建代码模块,因此在技术上可以使用多种不同的语言来创建程序集.

如果你确实浏览了它会有所帮助,如果你澄清你不明白的东西


Ant*_*lev 7

看到这个:

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


Gov*_*iya 7

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


小智 6

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

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

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


Ani*_*kur 6

程序集是构成功能逻辑单元的类型和资源的集合。.NET Framework 中的所有类型都必须存在于程序集中;公共语言运行时不支持程序集之外的类型。每次使用 Visual Basic .NET 创建 Microsoft Windows® 应用程序、Windows 服务、类库或其他应用程序时,都是在构建单个程序集。每个程序集都存储为 .exe 或 .dll 文件。

来源:https : //msdn.microsoft.com/en-us/library/ms973231.aspx#assenamesp_topic4

对于像我这样有 Java 背景的人,希望下图能澄清概念——

程序集就像 jar 文件(包含多个 .class 文件)。您的代码可以引用现有程序集,或者您的代码本身可以作为程序集发布以供其他代码引用和使用(您可以将其视为 Java 中的 jar 文件,您可以将其添加到您的项目依赖项中)。

归根结底,程序集是编译后的代码,可以在安装了 CLR 的任何操作系统上运行。这与说 .class 文件或捆绑的 jar 可以在安装了 JVM 的任何机器上运行相同。

在此处输入图片说明


Mat*_*ren 5

MSDN有一个很好的解释:

程序集是.NET Framework应用程序的构建块; 它们构成了部署,版本控制,重用,激活范围和安全权限的基本单元.程序集是一组类型和资源的集合,这些类型和资源构建为一起工作并形成逻辑功能单元.程序集为公共语言运行库提供了识别类型实现所需的信息.对于运行时,在程序集的上下文之外不存在类型.


Ahm*_*aba 5

除了接受的答案外,我想举一个例子!

例如,我们都使用

System.Console.WriteLine()
Run Code Online (Sandbox Code Playgroud)

但是System.Console.WriteLine!的代码在哪里?
实际将文本放在控制台上的代码是哪一个?

如果查看Console类文档的第一页,则会在顶部附近看到以下内容:程序集:mscorlib(在mscorlib.dll中)这表明Console类的代码位于assem-bly中名为mscorlib。一个程序集可以包含多个文件,但是在这种情况下,它只是一个文件,它是动态链接库mscorlib.dll。

mscorlib.dll文件在.NET中非常重要,它是.NET中类库的主要DLL,它包含所有基本的.NET类和结构。

如果您了解C或C ++,通常需要在顶部引用一个#include指令来引用头文件。包含文件为编译器提供了函数原型。相反,C#编译器不需要头文件。在编译期间,C#编译器直接访问mscorlib.dll文件,并从该文件中的元数据中获取有关其中定义的所有类和其他类型的信息。

C#编译器能够确定mscorlib.dll确实在名为System的命名空间中包含名为Console的类,该类具有名为WriteLine的方法,该方法接受单个string类型的参数。

C#编译器可以确定WriteLine调用是有效的,并且编译器在可执行文件中建立对mscorlib程序集的引用。

默认情况下,C#编译器将访问mscorlib.dll,但对于其他DLL,则需要告诉编译器类所在的程序集。这些被称为参考。

我希望现在很清楚!

从DotNetBookZero Charles pitzold