1

谁能回答以下问题。我正在使用 c# 语言。

  1. 我可以将程序集称为 .ddl 或 .exe 文件吗?
  2. 我可以将组装清单称为组装吗?
  3. 程序集、元数据和程序集清单之间有什么不同?
  4. 我能说......么

    .DLL 或 .EXE = 程序集 + 元数据 + 程序集清单 + MSIL 代码。

请帮我解决这些问题。

4

3 回答 3

4

1 - 程序集可以是单个 .DLL 或 .EXE 文件,但并非所有 .DLL 和 .EXE 都是程序集。程序集特定于 .NET 框架。.EXE 和 .DLL 程序集都可以由您的 .NET 应用程序引用或加载。

2 -- 程序集清单只是程序集的一部分,其中包含描述程序集的元数据。 从 MSDN程序集清单:

  • 枚举组成程序集的文件。

  • 控制对程序集类型和资源的引用如何映射到包含其声明和实现的文件。

  • 枚举程序集所依赖的其他程序集。

  • 在程序集的消费者和程序集的实现细节之间提供一定程度的间接性。

  • 呈现自描述的程序集。

如果您需要更改与特定程序集关联的元数据,您可以从代码中添加和更改程序集清单的某些方面。程序集清单可以存储为它自己的物理文件,但它仍被视为程序集的一部分。

3 -- 程序集由 CIL 代码、描述由 CIL 代码定义的类型的元数据、作为描述程序集的元数据的程序集清单和其他资源(例如程序集所需的静态图像)组成。因此,程序集清单和元数据一样只是程序集的一部分。

4——几乎。程序集 = MSIL 代码 + 程序集清单 + 类型元数据 + 资源。

程序集可以编译为 .EXE 或 .DLL 文件,但也可以由多个文件组成。

于 2013-03-19T12:58:40.657 回答
3

让我们从这些概念开始(简单地说)然后我们会得到答案
编译器是语法检查器和“正确代码”分析器。在 .Net 平台中,无论您使用哪种编译器,结果都是托管模块。托管模块是需要 CLR 执行的标准 32 位 Microsoft Windows 可移植可执行 (PE32) 文件或标准 64 位 Windows 可移植可执行 (PE32+) 文件。在此处输入图像描述

IL 代码编译器在编译源代码时生成的代码。在运行时,CLR 将 IL 编译为本地 CPU 指令。

元数据每个托管模块都包含元数据表。有两种主要类型的表:描述源代码中定义的类型和成员的表和描述源代码引用的类型和成员的表。

装配是一个抽象概念,最初可能难以掌握。首先,程序集是一个或多个模块或资源文件的逻辑分组。其次,程序集是重用、安全和版本控制的最小单元。根据您使用编译器或工具所做的选择,您可以生成单文件或多文件程序集。在 CLR 世界中,程序集就是我们所说的组件。
(CLR 实际上并不适用于模块,它适用于程序集)

Assembly Manifest是程序集的一部分,描述程序集中的文件集 程序

在此处输入图像描述 集允许您将可重用、安全、可版本化组件的逻辑和物理概念解耦。程序集的模块还包括有关引用程序集的信息(包括它们的版本号)。此信息使程序集具有自描述性。换句话说,CLR 可以确定程序集的直接依赖关系,以便执行程序集中的代码。
实际上,当使用 C# 编译器时,生成 .DLL 或 .EXE 将使用编译器选项完成,因此 DLL 和 EXE 在程序集概念中是相同的组件。

所以我们将有
1- 正确,程序集是托管 DDL 或 EXE 文件
2- 不,程序集清单只是程序集的一部分
3-在答案中描述
4-托管 .DLL 或 .EXE = 程序集(包含元数据 + 程序集清单 + MSIL 代码)

图片和杰弗里·里希特的一些名言

于 2013-03-20T18:35:26.123 回答
0

来自优秀的书Pro C# 5 and the .NET 4.5 Framework

当使用支持 .NET 的编译器创建 *.dll 或 *.exe 时,二进制 blob 称为 程序集

程序集包含MSIL 代码,它在概念上类似于 Java 字节码,除非绝对必要,否则它不会编译为特定于平台的指令。通常,“绝对必要”是指 MSIL 指令块(例如方法实现)被引用以供 .NET 运行时使用的点。

In addition to MSIL instructions, assemblies also contain metadata that describes in vivid detail the characteristics of every “type” within the binary. For example, if you have a class named SportsCar, the type metadata describes details such as SportsCar’s base class, which interfaces are implemented by SportsCar (if any), as well as a full description of each member supported by the SportsCar type. .NET metadata is always present within an assembly, and is automatically generated by a .NET-aware language compiler.

最后,除了 MSIL 和类型元数据之外,程序集本身也使用元数据来描述,元数据被官方称为清单。清单包含有关程序集当前版本的信息、区域性信息(用于本地化字符串和图像资源)以及正确执行所需的所有外部引用程序集的列表。

于 2016-04-11T10:38:54.117 回答