使用 .NET 编译器针对 ARM 架构

问题描述 投票:0回答:4

当您在.NET中编译Windows应用程序时,您可以将“平台目标”设置为x86或x64。这会将您的代码优化为特定的处理器架构并允许逃避 IL。 有谁知道是否有什么东西可以让 Windows Mobile 应用程序达到相同的结果?我只对在 ARM 架构上运行我的应用程序感兴趣。

c# .net visual-studio arm windows-mobile
4个回答
5
投票

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

这如何与紧凑框架相适应(我认为这是您的实际平台?)我不确定。


3
投票

使用 MonoAhead-of-Time (AOT) 编译。这就是他们如何将 UNITY 脚本移植到 iPhone(ARM 平台)上。在 Windows Mobile 上启动并运行它可能需要花费一些精力,因为据我所知,还没有人完成该特定的平台移植,但编译器等应该已经在那里了。

您可以在此处看到 Miguel de Icaza 在 MS PDC 上的演示。


2
投票

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

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


2
投票

x86 或 x64 不会优化 IL - 这是在已部署的计算机上运行的 JITter 的工作。 x86 或 x64 只是 标记位数标志

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

我不确定 为什么 您需要限制为 ARM 处理器,但是对 GetSystemInfo 的 P/Invoke 将返回一个 SYSTEM_INFO 结构,其中包含处理器类型。这可能会阻止您的应用程序在 !ARM 上继续运行,但不会真正运行。

编辑:重新阅读这个问题,我注意到除了 C# 和 .NET 标签之外,实际上没有任何迹象表明您只需要托管解决方案。如果您愿意采用非托管方式,显然可以直接编译为 ARM。

© www.soinside.com 2019 - 2024. All rights reserved.