我对 MSIL 和托管代码感到困惑,它们是相同的还是不同的? 我的意思是说,当我们构建 C# 代码时会发生什么?
哪个是对的
C# Code → C# compiler → Managed Code → MSIL
或
C# Code → C# compiler → MSIL
请提供真实的引用资料或链接来支持您的回答。
最佳答案
你混淆了不同的东西。 Managed code是用托管语言(C#、VB.NET、F# 和许多其他语言)编写的代码,编译成 CIL(通用中间语言,以前称为 Microsoft 中间语言或 MSIL)并在 CLR 的托管环境中运行。
另一方面,非托管代码直接编译为 native 代码(也称为程序集),它不在 CLR 上运行。
当您构建 C# 代码时,它会被编译成 CIL。这就是为什么您可以使用 ildasm 或 Reflector 等工具来检查编译代码的原因。执行 CIL 代码时究竟会发生什么取决于具体情况。可能是
- 使用 JIT 编译器(最常见的选项)“及时”编译成 native 代码。
- 使用预编译的 native 代码执行(您可以使用 NGEN 来获取它)。
- 直接解释;我认为某些版本的 .Net for Windows CE 或类似版本可以做到这一点。
关于c# - MSIL 是否与 .NET 中的托管代码相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10297423/