所以我知道,如果为任何CPU编译,都会得到MSIL输出。如果编译为x86,则会得到x86输出。
我对过程的理解如下
.NET Code -> Compiler -> MSIL -> JIT compiled in CLR -> Native Instruction
我的问题是,如果您在x86 / x64中进行编译,是否跳过上面的MSIL -> JIT compiled in CLR
步骤?还是我的理解力不强?
答案 0 :(得分:1)
您的理解不太正确。如果程序集仅由托管代码组成,则无论编译器设置(AnyCPU / x86 / x64)如何,它都会始终被编译为纯MSIL,因此,即使您将其编译为x86,您仍然可以获得MSIL
如果您编译为AnyCPU,则程序集可以以32位或64位进程的身份运行或加载到其中,而如果将其编译为x86,则只能以32位或64位进程运行(或加载)。同样,当编译为x64时,它只能作为64位进程运行(或加载到64位进程中)。两种情况下都使用相同的MSIL,并且JIT将MSIL编译为所需的32/64位本机代码。