A lot of developers misinterpret the meaning of "Target platform" option in Visual Studio. You can read a good explanation here. I don't want to take credit for others work, so I just summarize the 5 most important facts:
- "Any CPU, means that the assembly will run natively on the CPU is it currently running on.", however "Any CPU does not guarantee that it will run on both 32-bit and 64-bit Windows." (if it has 32-bit dependencies, but not marked - author)
- "[...] this setting actually does not affect the build of the assembly in any way except to set the platform status information on the assembly’s CLR header."
- "Reasons to set your project as x86 include dependencies upon native DLLs that are only available in 32-bit"
- "[...] assemblies marked for x86 can still run on 64-bit Windows."
- "All assemblies targeting .Net 1.0 and 1.1 will be 32-bit only (x86) [...]"
Don't forget to read the whole article to have a better understanding :)