2013-12-08 120 views
4

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

回答

4

你刚刚做错了。无论平台选择如何,IL都完全一样。

当您在Visual Studio 2013中创建新的Phone项目时,您将得到一个解决方案三个平台选择:AnyCPU,x86和ARM。后两者在纯.NET项目中是多余的。它们出现的唯一原因是因为Phone还支持本地C++项目。由于C++直接编译为机器码,所以目标体系结构确实是

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

1

中间语言(CIL;通用中间语言)不是跨目标平台不同。然而,其已经将准时编译(或预编译)为目标CPU的机器语言。否则它不会运行(注意:它可以被解释,但这不太可能)。 Java完全一样。

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

+0

坦克为您的答案。而且要清楚:我没有问题,这更像是一个纯粹的兴趣问题。但无论如何:谢谢。 – jalgames