2013-03-20 30 views
2

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

+0

不,选择x64的平台目标不会自然地编译它。它仍然会被编译为中间语言,但它只能在x64平台上运行。 NGEN的问题是你不能分发一个NGEN'ed组件 - 这是一个在机器上运行的服务。所以你可以分发一个程序集,然后让它服务。 – vcsjones 2013-03-20 12:19:00

+0

@vcsjones - 即使目标计算机具有相同的体系结构(x64/x86)? – 2013-03-20 12:20:37

+0

@vcsjones - 不,我的意思是关于NGEN不可分配。 NGEN的组件是否紧紧地绑定在创建它们的机器上? – 2013-03-20 12:26:34

回答

3

不,这不是一回事。 Platform目标只在PE标头中设置一个位,告诉运行时它是否希望在CLR的x86或x64版本上运行(如果指定“Any CPU”,则为中性)。编译仍然会产生MSIL代码; AFAIK,不可能告诉MS编译器直接发送本地代码(现在)。

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

其实,你也可以修改此位后,使用CorFlags

NGEN反而会编译IL到汇编代码(本机)。它也被称为AOT(前面的时间)编译,而不是JIT(Just In Time)

+0

另请参见为了比较,单声道AOT(与NGEN不完全相同)http://www.mono-project.com/AOT – 2013-03-20 12:26:29