如果不是CLR如何执行CIL,那么dll文件是CIL(常见的中间语言)吗?

时间:2014-12-11 05:18:24

标签: c# .net clr cil

在visual studio中,当我们编译源代码时,它将生成一个字节代码,然后当我们构建它时,创建一个dll文件。我已经卡住了字节代码(常见的中间语句)如何通过.net框架执行。我理解CIL和DLL都是平等的,但我不确定。请告诉我老板。

2 个答案:

答案 0 :(得分:3)

简而言之,当.Net语言编译器编译项目时,它将变为 .Net模块程序集。它们中的任何一个都包含 IL(中间语言)代码。单独的.Net模块不可用,因为它必须包含在程序集中。 (.Net模块并不常用。最常见的是,编译项目时得到的dll是一个模块程序集)。

一旦你安装"在目标机器上的这个程序集,你有两个选择:

  • 它可以按原样安装,即Dll包含IL。只有在执行期间, .Net运行时的组件(称为 Jitter )才会将其转换为机器代码(本机程序集),因为代码已执行。每次为每个新进程加载程序集以执行时,都会重复将IL转换为本机代码的过程。

  • 可以在安装过程中将其转换为机器代码(使用 ngen 等工具)。每次执行时,机器代码都可以执行,因此可以更快地启动/第一次执行方法。

注意:该主题一般是广泛的,这是该过程的10,000英尺级别概述。有许多细节,并且忽略了诸如 .Net Native 等新兴技术,以使这个答案变得简单并且与提出问题的方式最相关。

答案 1 :(得分:1)

简单来说,

C# - > C#编译器(编译时) - >汇编(DLL / EXE)或.net模块(MSIL格式)

装配 - > JIT编译器(运行时) - >机器代码(二进制形式)

了解更多详情, http://msdn.microsoft.com/en-in/library/ht8ecch6(v=vs.90).aspx