使用 C# 编译的可执行文件有什么?

What does an executable compiled using C# have?

据我了解,

  1. 任何使用 C# 或 F# 或 VB.Net 编写的代码都由各自的编译器编译成 Visual studio 到 IL 代码。

  2. 因此,安装在客户端机器上的 .NET 框架 运行time (CLR) 将使用此 IL 代码转换为机器代码和 运行程序.

问题是,这个EXE包含什么? IL 和一些 headers ?

在 .NET 世界中,这些基本部署单元称为 Assemblies,在应用程序的情况下具有 .exe 扩展名,或 [= 21=.dll 扩展名的情况下 图书馆。

简而言之,一个程序集包含四种类型的东西:

  1. An assembly manifest 向 .NET 运行时提供信息,例如程序集的名称、版本、 请求的权限,以及它引用的其他程序集。
  2. An application manifest 向操作系统提供信息,例如程序集应该如何 部署以及是否需要管理提升。
  3. Compiled types:编译后的IL代码和程序集中定义的类型的元数据。
  4. Resources:程序集中嵌入的其他数据,例如图像和可本地化的文本。

以上四项中,只有程序集清单是必须的。