c# - MSIL 是否与 .NET 中的托管代码相同?

标签 c# .net compilation il

我对 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 代码时究竟会发生什么取决于具体情况。可能是

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

关于c# - MSIL 是否与 .NET 中的托管代码相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10297423/

相关文章:

c# - 构建错误: the type or namespace name 'data' does not exist in the namespace "xxx.yyy.zzz" (are you missing an assembly reference?)

c# - 为什么我不能覆盖 hibernate.cfg.xml 中的配置

compilation - 在树莓派上制作Aircrack-ng时出现的错误

python - Cmake 将 python 编译到构建文件夹中

c - 编译后忽略部分代码

c# - 以编程方式重置 Windows XP 空闲时间

c# - 如何创建打开表单的自定义 PropertyGrid 编辑器项目?

Java - 在类中添加支持以允许乘法

.net - 类似谷歌金融的交互式图表控件的推荐

c# - 更改系统时间不接受时区