2009-01-24 87 views
2

当您在.NET中编译Windows应用程序时,您可以将“Platform Target”设置为x86或x64。这会优化您的代码到处理器的特定架构,并允许逃离IL。 有谁知道是否有什么可以实现Windows Mobile应用程序的相同结果?我只关心在ARM架构上运行我的应用程序。以.NET编译器为目标的ARM体系结构

回答

1

使用MonoAhead-of-Time(AOT)汇编。这就是他们如何将UNITY脚本编写到作为ARM平台的iPhone上。它可能需要一些劳动才能在Windows Mobile上启动并运行,因为afaik,没有人做过特定的平台端口,但编译器等应该已经在那里了。

您可以在MS PDC here上看到Miguel de Icaza的介绍。

4

我不相信指定平台目标确实优化给定体系结构生成的IL。相反,它说,“我只在指定的架构上运行,因为我包含特定于该架构的P/Invoke调用。”至少,这是我对它的理解。这意味着,在x64机器上运行时,可执行文件可以在32位版本的CLR下运行,以实现兼容性。

这是如何适应紧凑框架​​(我认为是你的实际平台?)我不确定。 (AOT)汇编。

+0

我不认为这是真的。我已经将Windows/Web应用程序编译为x64应用程序,即使您有符号可用,并且附加调试程序很多次,您也会收到调试程序无法获取变量值的消息,因为代码是优化。 – 2009-01-24 21:52:00

2

x86或x64不优化IL - 这是在部署的计算机上运行的JITter的工作。 x86或x64只是marks a bitness flag

当然,在桌面框架中,您可以将您的MSIL NGEN指定给特定的CPU - 但是IIRC,缺少本机映像将会恢复为JIT编译。除此之外,尽管如此,我不认为NGEN可以用于.NET CF。

我不知道为什么你需要限制ARM处理器,但P/Invoke来GetSystemInfo将返回一个SYSTEM_INFO结构与它的处理器类型。这可能会阻止你的应用程序继续运行!ARM,但不能真正运行。

编辑:重新阅读这个问题,我注意到除了C#和.NET标记外,没有任何迹象表明您只需要一个托管解决方案。如果你愿意非托管,你显然可以编译到ARM。

2

如果您想在基于Windows Mobile的设备上创建基于ARM的应用程序,请安装.NET Compact Framework。你将在VS中有一个新的“智能设备”项目类型。

我不知道是否有任何其他ARM平台WM的JIT,也有.NET Micro Framework,但我不能告诉你任何关于此的信息,也许这会解决你的问题吗?