MSIL与.NET中的托管代码相同吗?

10 .net c# il compilation

我对MSIL托管代码感到困惑他们是相同还是不同?我的意思是说,当我们构建C#代码时会发生什么?

哪一个是对的

C# Code ? C# compiler ? Managed Code ? MSIL

要么

C# Code ? C# compiler ? MSIL

请提供真实的参考或链接以支持您的答案.

svi*_*ick 13

你混淆了不同的东西.托管代码是用托管语言(C#,VB.NET,F#和许多其他语言)编写的代码,编译成CIL(通用中间语言,以前的Microsoft中间语言或MSIL)并在CLR的托管环境中运行.

另一方面,非托管代码直接编译为本机代码(也称为程序集),它不在CLR上运行.

在构建C#代码时,它会被编译为CIL.这就是为什么你可以使用像ildasm或Reflector这样的工具来检查编译的代码.执行CIL代码时到底发生了什么取决于具体情况.它可能是

  1. 使用JIT编译器(最常见的选项)"及时"编译成本机代码.
  2. 使用预编译的本机代码执行(您可以使用NGEN来获取​​).
  3. 直接解释; 我认为某些版本的.Net for Windows CE或类似版本.

  • +1 超越问题。OP 还应该阅读一些更多介绍性的“.NET 概述”类型的文章,以更彻底地了解托管与非托管。这是一个:http://www.codeproject.com/Articles/7333/Understanding-NET-Framework-at-a-glance (2认同)

Tam*_*man 10

如评论中所述,MSIL已更名为CIL.

C# Code --> C# compiler --> CIL

因为

CIL = Managed

在其背景下,也有

Native Code = Unmanaged

请注意,这Managed Code是完全不同的东西,它指的是源代码.


如果要扩展它,那么更正的完整过程是:

.NET Code --Compiler--> CIL (Managed) --JIT/NGEN--> Native Code (Unmanaged)


参考文献:

  1. 介绍C#(什么是.NET Framework? - > CIL和JIT - >前两个步骤)

  2. JIT/NGEN(迈向管理代码的成本模型 - >即时编译器 - >整体)