title: Why do .NET developers offer 32-bit/64-bit versions of .NET assemblies?
body: <p>Evey now and then I see both x86 and x64 versions of a .NET assembly. Consider the following <a href="http://www.codeplex.com/smartpart/Release/ProjectReleases.aspx?ReleaseId=10706" rel="nofollow noreferrer">web part for SharePoint</a>. Why wouldn't the developer just offer a single version and have let the JIT compiler sort out the rest? When I see these kinds offering is it just that the developer decided to create a native image using a tool like <a href="http://msdn.microsoft.com/en-us/library/6t9t5wcf(VS.80).aspx" rel="nofollow noreferrer">ngen</a> in order to avoid a JIT?</p>
  
  <p>Someone please help me out here, I feel like I'm missing something of note. </p>
  
  <p><strong>Updated</strong></p>
  
  <p>From what I got below, both x86 and x64 builds are offered because one or more of the following reasons:</p>
  
  <ol>
  <li><p>The developer wanted to avoid JITing and created a native image of his code, targeting a given architecture using a tool like ngen.exe.</p></li>
  <li><p>The assembly contains platform specific COM calls and so it makes no point to build it as AnyCPU. In these cases builds that target different platforms may contain different code.</p></li>
  <li><p>The assembly may contain Win32 calls using pinvoke which won't get remapped by a JIT and so the build should target the platform it is bound to.</p></li>
  </ol>