C# 名称空间还是程序集?

C# 名称空间还是程序集?,c#,.net,namespaces,assemblies,C#,.net,Namespaces,Assemblies,我对名称空间和程序集感到非常困惑。是System.Data和System.Web命名空间还是程序集 我注意到这些被称为名称空间,同时它们出现在GAC_32文件夹中。那么它们到底是什么呢?简言之: 大会: 程序集提供物理代码分组的基本单元。它是一个输出单元。 它是一个部署单元&一个版本控制单元。程序集包含MSIL代码 名称空间: 命名空间提供逻辑代码分组的基本单位。它是一组名称,其中每个名称都是唯一的。它们构成一组类的逻辑边界。命名空间必须在项目属性中指定。System.Data是一个命名空间,S

我对名称空间和程序集感到非常困惑。是
System.Data
System.Web
命名空间还是程序集

我注意到这些被称为名称空间,同时它们出现在
GAC_32
文件夹中。那么它们到底是什么呢?

简言之:

大会:

程序集提供物理代码分组的基本单元。它是一个输出单元。 它是一个部署单元&一个版本控制单元。程序集包含MSIL代码

名称空间:


命名空间提供逻辑代码分组的基本单位。它是一组名称,其中每个名称都是唯一的。它们构成一组类的逻辑边界。命名空间必须在项目属性中指定。

System.Data
是一个命名空间,
System.Data.DLL
(文件)是一个程序集


命名空间是类型的逻辑分组(主要是为了避免名称冲突)。一个程序集可以包含多个名称空间中的类型(
System.DLL
包含一些…),单个名称空间可以跨程序集分布(例如
System.Threading
)。

它们是名称空间。程序集包含多个名称空间。例如:
System.DLL
包含这些名称空间(以及更多):

还有一个名称空间可能包含嵌套的名称空间。它们只是组织代码的逻辑名称。请注意,
DLL
文件是包含名称空间的程序集

GAC
全局程序集缓存。据

全局程序集缓存存储专门指定由计算机上的多个应用程序共享的程序集


因此,存储在
GAC
中的常用程序集,因此您不需要将所有程序集文件复制到您从项目中引用的项目目录中。存储在
GAC
中的程序集是程序集。通常,当您从项目中添加对程序集的引用时
Strong命名
将在
bin\Debug
文件夹中创建
.dll
文件的副本。如果您希望制作程序集(例如类库项目)Strong-Named.See:

您在GAC中看到的文件是
System.Data.dll
,它是一个程序集,包含名称空间,包括
System.Data
。如果在Visual studio中查看引用属性,则会看到:

稍后,如果在参照上单击鼠标右键并选择“在对象浏览器中查看”,则将在该特定部件中看到名称空间


简而言之:

  • 程序集存储为.EXE或.DLL文件
  • 命名空间是对类型名称进行分组并减少名称冲突的一种方法
提示。

程序集包含一组类型(例如,l'assembly System包含许多名称空间,包括System、System.IO、ecc)。 通常,程序集的名称与其包含的命名空间相同,但并不总是相同

程序集和名称空间的其他示例

程序集1(coremassembly.DLL

包含名称空间Namespace1.subnamespace1

程序集2(扩展重组.DLL

包含名称空间Namespace1.subnamespace1

可以使用包含不同名称空间的程序集名称,并通过此技术使用其他程序集扩展现有程序集

定义。

组件

程序集是构成逻辑功能单元的类型和资源的集合。.NET Framework中的所有类型都必须存在于程序集中;公共语言运行库不支持程序集之外的类型。每次使用Visual Basic.NET创建Microsoft Windows®应用程序、Windows服务、类库或其他应用程序时,您都在构建单个程序集。每个程序集都存储为.exe或.dll文件。 注意:尽管在技术上可以创建跨多个文件的程序集,但在大多数情况下不太可能使用此技术

名称空间

组织Visual Basic.NET代码的另一种方法是使用名称空间。名称空间不是程序集的替代品,而是补充程序集的第二种组织方法。名称空间是对类型名称进行分组并减少名称冲突的一种方法。命名空间可以包含其他命名空间和类型。类型的全名包括包含该类型的名称空间的组合

链接:

是属于相同功能的类的逻辑分组。所以
System.Web
System.Data
是名称空间

MSDN将其描述为:

名称空间在C#编程中有两种使用方式。首先,.NET Framework使用名称空间来组织它的许多类;其次,声明自己的名称空间可以帮助控制大型编程项目中类和方法名称的范围

是可由.NET运行时环境执行的(预编译)代码块。它包含一个或多个名称空间。NET程序由一个或多个程序集组成

System.Web.dll
System.Data.dll
是程序集

MSDN将其描述为:

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

正如@amdluigi所说,“通常,