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