当你在.NET中编译Windows应用程序时,可以将“平台目标”设置为x86或x64。这将针对特定处理器架构优化你的代码,并允许逃避IL。有人知道是否有类似的工具可用于Windows Mobile应用程序吗?我只关心在ARM架构上运行我的应用程序。
我不认为指定平台目标会优化生成的IL代码,适用于给定架构。相反,它表示:“我只在指定的架构上运行,因为我包含特定于该架构的P/Invoke调用。”至少,这是我的理解。这意味着在x64机器上运行时,可执行文件可以在32位CLR版本下运行以实现兼容性。至于紧凑框架(我假设这是您实际使用的平台),我不确定它如何适用。
使用Mono的Ahead-of-Time(AOT)编译。这就是他们将UNITY脚本编译到iPhone上的方法,因为iPhone是一个ARM平台。在Windows Mobile上启动可能需要一些工作,因为据我所知,还没有人完成该平台的移植,但编译器等应该已经存在。您可以在MS PDC 此处查看Miguel de Icaza的演示。
x86或x64不会优化中间语言(IL) - 这是在部署的机器上运行的JIT编译器的工作。 x86或x64仅标记位数标志。当然,在桌面框架中,您可以将您的MSIL NGEN到特定的CPU上 - 但是我IRC,缺少本地映像只会恢复为JIT编译。除此之外,我不认为NGEN对.NET CF可用。我不确定为什么需要限制为ARM处理器,但对GetSystemInfo进行P / Invoke将返回一个包含处理器类型的SYSTEM_INFO结构体。这可以防止您的应用程序在非ARM上继续,但不能真正阻止其运行。编辑:重新阅读这个问题,我注意到除了C#和.NET标签之外,实际上没有任何迹象表明您只想要一个托管方案。如果你愿意使用非托管的解决方案,你显然可以编译成ARM代码。
如果你想在基于Windows Mobile的设备上创建基于ARM的应用,请安装.NET Compact Framework。在Visual Studio中,你将会有一个新的“智能设备”项目类型供使用。我不知道是否还有其他ARM平台的WM支持JIT,也有.NET Micro Framework但我对此一无所知,或许这可以解决你的疑问?