Search code examples
.netassemblies64-bit32bit-64bitanycpu

C# compiling for 32/64 bit, or for 'Any CPU'?


Possible Duplicate:
What does the Visual Studio "Any CPU" target mean?

I've noticed that when compiling C# code in Visual Studio, there are typically options for compiling for 32/64 bit systems, and there's also one for compiling for Any CPU.

What's the difference between the two options? Does choosing Any CPU only compile down to an intermediate byte code while the first option compiles down to machine code (this sounds unlikely to me)? Or something else?


Solution

  • On a 32-bit machine:

    • Any CPU: runs as a 32-bit process, can load Any CPU and x86 assemblies, will get BadImageFormatException if it tries to load an x64 assembly.

    • x86: same as Any CPU.

    • x64: BadImageFormatException always.

    On a 64-bit machine:

    • Any CPU: runs as a 64-bit process, can load Any CPU and x64 assemblies, will get BadImageFormatException if it tries to load an x86 assembly.

    • x86: runs as a 32-bit process, can load Any CPU and x86 assemblies, will get BadImageFormatException if it tries to load an x64 assembly.

    • x64: same as Any CPU.

    It is the JIT compiler that generates an assembly code that's compatible with the requested target based on this flag.