首页 文章

什么是.NET程序集?

提问于
浏览
176

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

18 回答

  • 1

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

  • 3

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

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

    • Public/Shared assembly: 这是一个dll,一次可以由多个应用程序使用 . 共享程序集存储在 GAC 中,即 Global Assembly Cache 中 .

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

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

    希望这有助于读者!

  • 32

    Assemblies

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

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

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

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

  • 1

    程序集是硬盘驱动器上存储.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中使用任何特定类,必须执行两项操作 . 首先,您的应用程序必须引用包含该类的程序集 . 其次,您的应用程序必须导入与该类关联的命名空间 .

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

  • 1

    维基百科不得不说:

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

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

  • 3

    this

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

  • 53

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

  • 8

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

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

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

  • 7

    MSDN有good explanation

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

  • 2

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

    例如,我们都使用

    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调用是有效的,并且编译器在可执行文件中 Build 对mscorlib程序集的引用 .

    通过default C#编译器将访问mscorlib.dll,但对于其他DLL,您需要告诉编译器类所在的程序集 . 这些被称为 references.

    我希望现在很清楚!

    来自DotNetBookZero Charles pitzold

  • 5

    程序集是形成逻辑功能单元的类型和资源的集合 . .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

  • 1

    在.Net中,程序集可以是:

    包含类型(或类),资源(位图/图像/字符串/文件),命名空间,私有或公开编译的配置文件的各种可管理部分的集合;部署到本地或共享(GAC)文件夹;其他程序/组件可以发现;可以版本化 .

  • 6

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

    它包含:

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

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

  • 7

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

  • 1

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

  • 227

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

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

  • 2

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

相关问题