【问题标题】:.NET CSC.EXE output file format.NET CSC.EXE 输出文件格式
【发布时间】:2012-05-10 12:00:34
【问题描述】:

所以,我对 .NET 运行时架构和结构很感兴趣。我想逐步了解它是如何工作的。我有几本书,也在谷歌中寻找一些答案,但现在,我想要一些问题的正确答案。

在编写的书中,CSC.exe(编译器)生成托管模块,其中包含: 1.PE头 2.CLR头 3. 元数据 4. IL代码

编译后,工具 AL.exe(程序集链接器)将该模块合并到程序集中。 我也知道,程序集有两个主要的文件扩展名:DLL 或 EXE。

但是,我对托管模块很感兴趣。它如何编译编译器以及文件格式有什么?它是 .netmodule 扩展名吗?还是 DLL?

附言 对不起我的英语。

【问题讨论】:

  • 阅读 ECMA335。有趣且内容丰富。
  • 没有人。我明白什么是 IL 代码等等。我的问题是关于托管模块扩展。有时我读到,模块和程序集具有相同的扩展名( DLL )。有时我读到,模块有 .netmodule 扩展名。有一些模糊的文件扩展名到底有一个模块(托管模块)。我们知道,Managed module有4个要点: 1. PE Header; 2.CLR头; 3.元数据; 4. IL代码;但是什么是物理管理模块。当语言编译器从高级代码创建它时,它有什么扩展?

标签: .net clr .net-assembly


【解决方案1】:

托管模块在格式上就像 .DLL/.EXE 一样(它们都是 PE 格式,它们包含 PE 头 + CLR 头 + 元数据 + 代码)。 不同之处在于,如果您正在执行多模块组装,您将创建一个 .netmodule。多模块程序集是其中包含多个模块的程序集,System.Data.dll 就是一个示例,因为它在 1 个程序集中既有托管部分,又有原生 C++ 部分。

.NetModules 只是将多个模块打包成一个程序集的一种便捷方式。高级编译器(如 C#)不处理它,这就是您需要使用 Assembly Linker 工具 (AL) 的原因。

希望这会有所帮助 谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多