命名空间是程序集还是项目?

sab*_*669 8 .net c#

只是为了明天的面试复习一些 .NET 的东西,

MSDN对该Internal关键字的定义如下:

内部类型或成员只能在同一程序集中的文件内访问

但我似乎找不到程序集的定义。是同一个命名空间、同一个项目中的所有内容,还是……?

Mik*_*ray 13

程序集和命名空间是正交的。一个程序集可以包含多个命名空间,并且单个命名空间可以跨越多个程序集。程序集是 .NET 框架中最小的可独立版本化的代码单元。程序集定义代码的物理组织(到 dll 或 exe 文件中),而命名空间定义逻辑组织。单个程序集是单个 dll 或 exe 文件。命名空间是通常基于技术或功能的逻辑分组。System.Net涉及网络。System.Text处理文本操作和编码。

请注意,我根本没有提到项目。项目是只与特定构建系统真正相关的东西。.NET 运行时本身并不了解项目。由于大多数人使用 Visual Studio 和 MSBuild 工具进行开发,并且默认情况下是让单个项目输出单个程序集,因此人们倾向于在随意对话中互换使用术语“项目”和“程序集”。其他工具(例如 MonoDevelop)遵循类似的模式,但没有规则规定单个项目必须生成单个程序集。


Jon*_*Jon 6

程序集是已编译为 .DLL 或 .EXE 的项目。出于 Visual Studio 的目的,任何类库项目、Windows 窗体应用程序或 WPF 应用程序都将编译为程序集。


Chr*_*tos 4

不,在一个程序集中,您可能定义了多个命名空间。程序集是 .NET 中最小的部署单元。它是您的 IL 代码和有关您的代码的元数据的集合。它包含一个名为 Manifest 的文件,其中声明了程序集中使用或引用的所有类型。还有一些其他文件。

正如MSDN中更正式的表述:

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

另一方面,对于 anamespace我们有

命名空间关键字用于声明包含一组相关对象的范围。您可以使用命名空间来组织代码元素并创建全局唯一的类型。

正如MSDN中所述

从上面可以清楚地看出,您可以在程序集中声明任意数量的命名空间。

IL 反汇编器是一个很好的免费工具,您可以使用它来查看程序集中的内容。