[.net] How do I fix the Visual Studio compile error, "mismatch between processor architecture"?

A good rule of thumb is "open DLLs, closed EXEs", that is:

  • EXE targets the OS, by specifying x86 or x64.
  • DLLs are left open (i.e., AnyCPU) so they can be instantiated within a 32-bit or a 64-bit process.

When you build an EXE as AnyCPU, all you're doing is deferring the decision on what process bitness to use to the OS, which will JIT the EXE to its liking. That is, an x64 OS will create a 64-bit process, an x86 OS will create an 32-bit process.

Building DLLs as AnyCPU makes them compatible to either process.

For more on the subtleties of assembly loading, see here. The executive summary reads something like:

  • AnyCPU – loads as x64 or x86 assembly, depending on the invoking process
  • x86 – loads as x86 assembly; will not load from an x64 process
  • x64 – loads as x64 assembly; will not load from an x86 process