C#代码是否编译为本地二进制文件?

20

我知道Java代码被编译成字节码,由JVM执行。

C#又是怎样的情况呢?我注意到用C#编写的应用程序有.exe扩展名,这似乎表明它们是本地机器指令。但实际上是这样吗?


1
这应该可以解释清楚。http://en.wikipedia.org/wiki/List_of_CLI_languages - km1
使用 ngen(类似于 Java 的 jit) - cnd
6个回答

30

不。

与Java类似,C#被编译成中间语言(称为MSIL或CIL)。

与Java不同的是,IL存储在EXE文件中,这些文件具有足够的实际EXE代码,可以显示一个对话框向用户询问是否安装.Net。


2
嗯,仅仅回答“否”对于“C#代码是否被编译”这个问题来说有点令人困惑。很明显,它会被编译成CLI指令。只是不会(直接)编译成本机代码。不过,最终它们都将被即时编译成本机代码。 - sehe
1
@sehe:我拒绝问题中的最后一行。 - SLaks
1
我已经编辑了问题标题以避免不匹配 :) - sehe
3
不是那么简单。有 ngen 和 GAC。 - SK-logic
好的。那么C#是否会因为存储在EXE中或由同一公司开发操作系统而获得任何优势呢?简而言之:C#比Java更快吗? - Queequeg
显示剩余4条评论

6

C#编译分为以下两个步骤:

1. Conversion from C# to CIL by the C# compiler

2. Conversion from CIL to instructions that the processor can execute.

一个组件(即时)在运行时将CIL编译成机器码。


6

可移植可执行文件(Portable Executable)这个术语并不仅限于.NET。 - Matthew

5

C#代码被编译为MSIL,类似于Java字节码。在运行时,MSIL将被转换为机器指令。


3

C#代码被编译为MSIL,MSIL由.NET CLR处理。


0

还有一个项目可以将C#编译为独立的二进制可执行文件:CoreRT


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接