.net 编译器为编译代码执行了哪些过程?

What are the processes that the .net compiler does in order to compile code?

首先我想说我不确定这是否是 post 此类问题的最佳 stack-exchange 网站,但我不确定它最适合哪里。无论如何,正如问题标题所说,我想知道 .net 编译器在将我的 C# 代码转换为机器语言代码时执行的步骤。我看过一些视频,但是有些东西我还是不太明白。我会把我所有的问题都放在底部,我会尽量具体。

这是我对 .net 编译器工作原理的理解

我的 C# 代码 -> IL -> JIT -> 汇编代码

  1. "My C# code" 的确切术语是什么?
  2. CLR 在这里有什么用?
  3. 整个过程是由 CLR 处理的还是它从哪里来的?
  4. 什么是元数据?
  5. 在从第 1 步到第 2 步和从第 2 步到第 3 步的转换之间是否发生了一些额外的事情,或者只是一些代码被翻译成 lower-level 语言?
  1. 仅 C#(C# -> Roslyn(或 csc)-> IL -> JIT -> 本机)
  2. CLR 读取您的 IL,JIT 读取它并保存 GC(还有很多很多与此问题无关的内容)
  3. CLR 仅运行您编译的代码。 C# 编译是通过普通编译器完成的(以前是 csc.exe,但现在已被 Roslyn 弃用)。
  4. There are plenty of examples that state what Metadata is
  5. 这些步骤中有很多内容,但这是主要流程。