什么是.NET程序集?

时间:2010-06-04 09:03:49

标签: c# .net

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

18 个答案:

答案 0 :(得分:235)

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

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

  2. 公共/共享程序集: 它是一个dll,可以一次由多个应用程序使用。共享程序集存储在 GAC 中,即 Global Assembly Cache

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

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

    希望这有助于读者!

答案 1 :(得分:164)

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

答案 2 :(得分:57)

<强>装配体

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

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

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

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

答案 3 :(得分:32)

程序集是硬盘驱动器上存储.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配置文件被添加到您的应用程序中。

EG。 Web.Config中

enter code here

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

答案 4 :(得分:8)

维基百科不得不说:

  

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

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

答案 5 :(得分:7)

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

答案 6 :(得分:7)

请参阅this

  

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

答案 7 :(得分:6)

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

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

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

答案 8 :(得分:5)

MSDN有good explanation

  

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

答案 9 :(得分:5)

除了接受的答案,我想给你一个例子!

例如,我们都使用

System.Console.WriteLine()

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

如果查看documentation for the Console class的第一页,您会看到以下顶部附近:程序集:mscorlib(在mscorlib.dll中) 这表明Console类的代码位于名为mscorlib的汇编中。程序集可以包含多个文件,但在这种情况下,它只有一个文件,即动态链接库mscorlib.dll。

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

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

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

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

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

我希望现在很清楚!

来自DotNetBookZero Charles pitzold

答案 10 :(得分:3)

  

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

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

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

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

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

enter image description here

答案 11 :(得分:2)

在.Net中,程序集可以

  

包含Types (or Classes)Resources (Bitmaps/Images/Strings/Files)Namespaces的各种可管理部分的集合,   Config Files汇编了PrivatelyPublicly;部署到   localShared (GAC)文件夹;其他discover-able   programs/assemblies和;可以版本化。

答案 12 :(得分:2)

由于程序集是Microsoft.Net中代码的版本安全性,部署和可重用性的最小单元。

它包含:

- Assembly Identity
- Manifest
- Metadata
- MSIL Code
- Security Information
- Assembly Header

答案 13 :(得分:1)

通过将任意数量的程序集拼接在一起构建.NET应用程序。简而言之,程序集只不过是一个版本化的,自描述的二进制文件(DLL或EXE),它包含一些类型集合(类,接口,结构等)和可选的资源(图像,字符串表和诸如此类的东西)。现在痛苦地意识到的一件事是,.NET程序集的内部组织与经典COM服务器的内部组织完全不同(无论共享文件扩展名如何)。

答案 14 :(得分:1)

在.NET中,当我们编译源代码时,然后在Visual Studio中生成程序集。程序集由Manifest和IL(中级语言)两部分组成。清单包含程序集元数据意味着程序集的版本要求,安全标识,组成程序集的所有文件的名称和哈希值。 IL包含有关类,构造函数,主要方法等的信息。

答案 15 :(得分:1)

我发现此链接非常有用。它甚至可以让您了解IL如何在.NET中发挥作用。

http://www.codeguru.com/columns/csharp_learning/article.php/c5845/C-FAQ-15--What-is-an-Assembly.htm

答案 16 :(得分:1)

Visual Studio 解决方案由一个或多个项目组成。例如:控制台项目可以生成程序集。程序集是逻辑上可以发送给客户的代码块,物理上是.EXE(可执行程序)或.DLL(可由其他程序重用)。

答案 17 :(得分:1)

程序集是使用.NET Framework进行编程的基础部分。 它包含CLR在可移植可执行文件中执行MSIL(Microsoft中间语言)代码的代码,如果它没有关联的程序集清单,则不会执行。