When you compile a C#/ VB.NET application you get a .DLL/.EXE which can be either 32 bit, 64 bit, or either.

It really boils down to where the resulting code is run.  If you specify 32 bit, you get a .DLL/.exe which can only run in 32 bit mode.  That means also if you attempt to link/call/invoke a method which is in 64 bit world you get an error.  The same is true if you do the reverse.  If you do not specify which your code can run on either assuming it does not invoke a library in a different format.

For example if you were writing a application which needed to use crystal reports XI-R2, you cannot code a 64 bit application.  Crystal XI-R2 is pure 32 bit and knows nothing about 64 bit worlds.  In my opinion this requires you specify 32 bit as the "either" method could result in an unexpected error should your application be run on a 64 bit client.

 

One interesting quirk:  .DLL's appear to run based upon the caller's method of use.  The same .DLL can be used by both 32 and 64 bit applications.  They will be in different application memory spaces but they will function.  I tend to code my .DLL's as "either" unless I am coding a module which must interface to a 32bit library.  This allows my "either" .DLL's to be used on 64 bit web servers or 32 bit web servers without recompilation.