什么是.NET程序集?
什么是.NET程序集? 我浏览网页,我无法理解这个定义。
更简单地说:.NET运行时环境可以执行的一段(预编译)代码。 一个.NET程序由一个或多个程序集组成。
程序集是.net应用程序部署的最小单元。 它可以是一个DLL或EXE 。
它主要有两种types:
-
私人大会:只有一个应用程序的唯一财产的DLL或EXE。 它通常存储在应用程序根文件夹中
-
公共/共享程序集:这是一个可以被多个应用程序一次使用的DLL。 共享程序集存储在GAC中,即全局程序集caching 。
听起来很难? 纳阿….
GAC只是C:\ Windows \ Assembly文件夹,您可以在其中findPC中安装的所有软件的公共程序集/ dll。
还有第三种和最不为人知的types的组件: 卫星组件 。
卫星组件仅包含静态对象,如应用程序所需的图像和其他非可执行文件。
希望这有助于读者!
大会
编译应用程序时,创build的MSIL代码存储在程序集中。 程序集包括可执行应用程序文件,您可以直接从Windows运行而不需要任何其他程序(这些文件具有.exe文件扩展名)和库(具有.dll扩展名)供其他应用程序使用。
除了包含MSIL之外,程序集还包括元信息(即,有关包含在程序集中的信息的信息,也称为元数据)和可选资源(MSIL使用的其他数据,如声音文件和图片)。 元信息使组件能够完全自我描述。 您不需要其他信息来使用程序集,这意味着您可以避免无法将所需的数据添加到系统registry等问题,这在使用其他平台进行开发时往往是一个问题。
这意味着部署应用程序通常与将文件复制到远程计算机上的目录一样简单。 由于在目标系统上不需要额外的信息,所以你可以从这个目录运行一个可执行文件,并且(假设.NET CLR已经安装),那么你就可以开始。
当然,你不一定要包含在一个地方运行应用程序所需的一切。 您可能会编写一些执行多个应用程序所需任务的代码。 在这样的情况下,将可重用代码放置在所有应用程序可访问的位置通常是有用的。 在.NET Framework中,这是全局程序集caching(GAC)。 在GAC中放置代码非常简单 – 只需将包含代码的程序集放在包含此caching的目录中即可。
程序集是存储.NET Framework中的类的硬盘上实际的.dll文件。 例如,ASP.NET Framework中包含的所有类都位于名为System.Web.dll的程序集中。
更准确地说,程序集是.NET Framework中的主要部署,安全性和版本控制。 由于程序集可以跨越多个文件,程序集通常被称为“逻辑”dll。
注意
.NET Framework(2.0版)包含51个程序集。
有两种types的程序集:私有的和共享的。 专用程序集只能由单个应用程序使用。 另一方面,共享程序集可以被位于同一服务器上的所有应用程序使用。
共享程序集位于全局程序集caching(GAC)中。 例如,System.Web.dll程序集和包含在.NET Framework中的所有其他程序集都位于全局程序集caching中。
注意
全局程序集caching实际位于您的计算机\ WINDOWS \ Assembly文件夹中。 在\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727文件夹中有每个程序集的单独副本。 第一组程序集在运行时使用,第二组在编译时使用。
在应用程序中使用程序集中包含的类之前,必须添加对程序集的引用。 默认情况下,ASP.NET应用程序引用全局程序集caching中包含的最常见的程序集:
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,则可以通过select菜单选项“网站”,“添加引用”,然后select需要引用的程序集的名称来明确添加对程序集的引用。 例如,添加对System.Messaging.dll程序集的引用会导致清单1.4中的Webconfiguration文件被添加到您的应用程序中。
例如。 Web.Config中
enter code here
如果您不想使用Visual Web Developer,则可以通过手动创build上述示例中的文件来添加对System.Messaging.dll程序集的引用
维基百科不得不说:
在Microsoft .NET框架中,程序集是用于部署,版本控制和安全性的部分编译的代码库。 有两种types:进程程序集(EXE)和库程序集(DLL)。 进程程序集代表了一个使用库程序集中定义的类的进程。 .NET程序集包含CIL中的代码,通常由CLI语言生成,然后由CLR即时编译器在运行时编译为机器语言。 程序集可以包含一个或多个文件。 代码文件被称为模块。 一个程序集可以包含多个代码模块,因为可以使用不同的语言来创build代码模块,所以使用几种不同的语言来创build程序集在技术上是可行的。 但Visual Studio不支持在一个程序集中使用不同的语言。
如果你真的做了浏览,这将有助于澄清你不明白的东西
看到这个 :
在Microsoft .NET框架中,程序集是用于部署,版本控制和安全性的部分编译的代码库
在IL代码中的类,接口,枚举等的物理集合。 其中可以是.EXE或.DLL文件.EXE是可执行文件,.DLL可以dynamic使用任何.net支持的语言。
程序集是由types和其他资源组成的运行时单元。 assembly中的所有types都具有相同的版本号。
通常,一个程序集只有一个名称空间,并被一个程序使用。 但它可以跨越几个名称空间。 而且,一个命名空间可以分散在多个程序集中。 在大型devise中,一个程序集可能由多个文件组成,这些文件由一个清单(即目录)保存在一起。
在C#中,程序集是一个.Net应用程序的最小部署。它可以是一个dll或一个exe。它有两种types:1.私有程序集2.公共/共享程序集
MSDN有一个很好的解释 :
程序集是.NET Framework应用程序的构build块。 它们构成了部署,版本控制,重用,激活范围和安全权限的基本单位。 程序集是构build在一起工作并形成function逻辑单元的types和资源的集合。 程序集为公共语言运行时提供了需要了解types实现的信息。 对于运行时,types不存在于程序集的上下文之外。
在.Net中,程序集可以是:
包含
Privately
或Publicly
编译的Types (or Classes)
,Resources (Bitmaps/Images/Strings/Files)
,Namespaces
,Config Files
的各种可pipe理部分的集合; 部署到local
或Shared (GAC)
文件夹; 由其他programs/assemblies
discover-able
; 可以版本化。
除了被接受的答案,我想给你举个例子!
比如我们都用
System.Console.WriteLine()
但是System.Console.WriteLine的代码在哪里?
这是实际将文本放在控制台上的代码?
如果您查看Console类的文档的第一页,您将在顶部看到以下内容:程序集:mscorlib(在mscorlib.dll中)这表示Console类的代码位于程序集命名为mscorlib。 程序集可以由多个文件组成,但在这种情况下,它只有一个文件,即dynamic链接库mscorlib.dll。
mscorlib.dll文件在.NET中非常重要,它是.NET中类库的主要DLL,它包含了所有基本的.NET类和结构。
如果你知道C或C ++,通常你需要一个引用头文件的顶端的#include指令。 包含文件为编译器提供函数原型。 对比C#编译器不需要头文件。 在编译期间,C#编译器直接访问mscorlib.dll文件,并从该文件中的元数据获取有关所有类和其中定义的其他types的信息。
C#编译器能够确定mscorlib.dll确实在名为System的名称空间中包含一个名为Console的类,该方法名为WriteLine,该方法接受stringtypes的单个参数。
C#编译器可以确定WriteLine调用是否有效,编译器会在可执行文件中build立对mscorlib程序集的引用。
默认情况下C#编译器将访问mscorlib.dll,但对于其他DLL,您需要告诉编译器所在的程序集。 这些被称为参考。
我希望现在很清楚!
从DotNetBookZero查尔斯pitzold
由于程序集是Microsoft.Net中代码安全性,部署和代码重用性的最小单元。
它包含:
- Assembly Identity - Manifest - Metadata - MSIL Code - Security Information - Assembly Header
程序集是.NET Framework编程的基础。 它包含CLR在可移植可执行文件中执行MSIL(Microsoft中间语言)代码的代码,如果它没有关联的程序集清单,将不会执行。
.NET应用程序是通过拼接任意数量的程序集来构造的。 简而言之,一个程序集只不过是一个版本化的自描述二进制文件(DLL或EXE),它包含一些types(类,接口,结构等等)和可选资源(图像,string表等等)的集合。 有一件事现在要痛苦地意识到,.NET程序集的内部组织与传统COM服务器的内部组织(无论共享文件扩展名是什么)完全不同。
在.NET中,当我们编译我们的源代码,然后程序集在Visual Studio中生成。 大会由Manifest和IL(中级语言)两部分组成。 清单包含程序集元数据意味着程序集的版本要求,安全标识,构成程序集的所有文件的名称和哈希。 IL包含有关类,构造函数,主要方法等信息。
我发现这个链接是非常有帮助的。 它甚至让你看到IL如何在.NET中扮演一个angular色。
http://www.codeguru.com/columns/csharp_learning/article.php/c5845/C-FAQ-15–What-is-an-Assembly.htm
Visual Studio解决scheme由一个或多个项目组成。 例如:控制台项目可以生成一个程序集 。 一个程序集逻辑上是可以发送给客户的代码块,实际上是.EXE(可执行程序)或.DLL(可以被其他程序重用)。