什么是MSIL,CLR,什么是CTS,这意味着有n个网站在解释这些概念,我们都知道,但是如果我们想学习源代码到机器代码的精确的端到端过程,带有工作流程图像的转换过程,没有人在一处解释所有内容。
所以这里我的问题与其他问题不同,我们可以将诸如源代码的详细信息获取到MSIL(汇编语言),然后通过使用jit编译器等将其转换为本机代码,但是当我们进行编译时,没有清晰的画面幕后发生的情况以及Assembly(.dll或.exe)ILASM.exe,MSIL,CLR,CLS,CTS等之间的顺序是什么。这些东西什么时候会叫?
有人可以一步一步地解释Dot Net框架源代码编译过程的概述,并附带一个示例图片吗?而且我敢肯定,这对所有希望将.net整个编译过程集中在一处的其他人也将有所帮助。
答案 0 :(得分:0)
使用白板和大量的时间来解释这种方法会更好,但是我会尝试一下。
.NET 编译/构建 => 使用以下命令将 C#/ VB.NET 代码转换为 PE exe格式其中的 MSIL +加载.NET框架( CLR )的一些技巧。
Windows 仅识别 PE格式可执行文件。但是它不能按原样运行 MSIL 。因此,在编译/构建过程中,将使用.NET框架程序集(用于 JIT 编译, GC 等)来引导 .NET exe 。这是一种欺骗Windows操作系统的技巧。操作系统将其作为正常过程启动,但是控件不会直接移交给您的 MSIL 代码。而是将其移交给.NET CLR程序集(它们是正常的机器代码dll)。然后,.NET CLR程序集开始 JIT 编译打包在 exe 中的MSIL代码,并接管内存和线程管理。
这是大多数新手.NET开发人员感到困惑的缺失部分。因此,简单的技巧是; .NET exe 具有额外的引导代码,这些代码会在到达 MSIL 之前执行。其余所有诸如 ASP.NET , WPF 之类的东西只是被加载的 CLR dlls 。这就是为什么 .NET exe比本地C / C ++ exe慢得多的原因。
您的其他查询
ILASM ->是可以读取.NET exe文件并显示其中包含的MSIL的工具。 Reflector之类的工具甚至可以将此MSIL代码转换回C#/ VB.NET
CLR ->是那些在编译过程中进行引导并根据需要加载到内存中的程序集。它正在运行您的MSIL代码。
CTS ->只是您编写代码所依据的类型系统