【问题标题】:Is NGEN and platform target the same thing?NGEN 和平台目标是同一个东西吗?
【发布时间】:2013-03-20 12:16:59
【问题描述】:

您可以使用 NGEN.EXE 将 MSIL 程序集编译为本机程序集。但是当你有源代码时,你也可以在项目选项中选择“平台目标”。如果我在那里选择 x64,这与在 x64 机器上运行 NGEN.EXE 是一样的吗?

【问题讨论】:

  • 不,选择 x64 平台目标不会原生编译它。尽管它只能在 x64 平台上运行,但它仍将被编译为中间语言。 NGEN 的问题是您不能分发 NGEN 的程序集——它是在机器上运行的服务。所以你可以分发一个程序集,然后让服务 ngen 它。
  • @vcsjones - 即使目标计算机具有相同的架构 (x64/x86)?
  • @vcsjones - 不,我的意思是 NGEN 不可分发。然后 NGEN 的程序集是否紧密地绑定到创建它们的机器上?
  • @Vilx AOT/NGEN 在使用第三方库和泛型时遇到问题。例如,请参阅我链接的 AOT Mono 页面上的免责声明
  • @Vilx- 也看到这个答案stackoverflow.com/a/45710/863564

标签: .net ngen


【解决方案1】:

不,这不是一回事。 平台目标仅在 PE 标头中设置一个位,告诉运行时它是否更喜欢在 CLR 的 x86 或 x64 版本上运行(或中性,如果您指定“任何 CPU”)。编译仍然会产生 MSIL 代码; AFAIK,无法告诉 MS 编译器直接发出本机代码(目前)。

该标志很有用,例如,当您 PInvoking 只有 x86 版本的本机 DLL 时。

其实以后也可以修改这个位,使用CorFlags

NGEN 会将 IL 编译为汇编代码(本机)。它也被称为 AOT(Ahead Of Time)编译,而不是 JIT(Just In Time)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
  • 1970-01-01
  • 2012-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多