为什么要为多个平台编译.NET代码

时间:2013-12-08 17:26:05

标签: .net

当e。 G。创建一个Windows Phone应用程序,我必须在模拟器和ARM中选择x86进行调试,以便在手机上进行调试。那当然是因为我的PC运行的是x86(x64,具体而言,但x64处理器的寄存器长度不同(如果我错了,请纠正我))我的手机有一个ARM处理器。但与C ++不同,C#不是直接编译成汇编程序,而是在某种中间语言中编译。所以我的问题是:为什么这种中间语言对于不同的平台有所不同。重写解释中间语言的虚拟机是不是足够了? E. g。 Java可以在Mac,PC等上运行,而无需为每个平台编译。

2 个答案:

答案 0 :(得分:4)

你刚才做错了。无论平台选择如何,IL都完全相同。

在Visual Studio 2013中创建新的Phone项目时,您将获得一个包含三个平台选择的解决方案:AnyCPU,x86和ARM。后两者在纯.NET项目中是多余的。它们存在的唯一原因是因为Phone还支持本机C ++项目。由于C ++直接编译为机器代码,因此目标体系结构 无关紧要。

在纯.NET项目中,您只需要AnyCPU。当然命名得恰当;)

答案 1 :(得分:1)

中间语言(CIL;通用中间语言)在目标平台上不会不同。但是,它即时编译(或预编译)到目标CPU的机器语言中。否则它不会运行(注意:它可以解释,但这是一个不太可能的角落案例)。完全相同的Java。

关于Visual Studio中的目标CPU设置,您始终可以使用AnyCPU,问题就会消失。