title: BadImageFormatException when AnyCPU test assembly implements interface from x64 production assembly
body: <p>I seem to have hit on a scenario where when I run mstest on an AnyCPU assembly which references an x64 assembly, I get a BadImageFormatException.</p>
  
  <p>The issue occurs when an interface in x64Production.dll is implemented (even if unused) by the AnyCPUTestingx64Production.dll test assembly:</p>
  
  <pre class="lang-none prettyprint-override"><code>Unable to load the test container 'D:\AnyCPUTestingx64Production.dll' 
  or one of its dependencies. error details:
  System.BadImageFormatException: 
      Could not load file or assembly 'x64Production, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format.
  </code></pre>
  
  <ul>
  <li>mstest is running on windows 7 64-bit</li>
  <li>the test assembly is built as AnyCPU to get it to run in 64bit on a 64bit host (as outlined <a href="http://msdn.microsoft.com/en-us/library/ee782531.aspx" rel="noreferrer">here</a>)</li>
  <li>the testsettings file specifies &lt;Execution hostProcessPlatform="MSIL"/&gt;</li>
  <li>peverify and corflags reveal nothing interesting</li>
  <li>this is readily reproducible in a toy solution, i.e. where
  
  <ul>
  <li>x64Production
  
  <ul>
  <li>references no other assemblies</li>
  <li>includes only an empty public interface IExampleInterface</li>
  <li>has &lt;PlatformTarget&gt; set to x64</li>
  </ul></li>
  <li>AnyCPUTestingx64Production
  
  <ul>
  <li>references only x64Production.dll (i.e. this issue is present even without a reference to Microsoft.VisualStudio.QualityTools.UnitTestFramework)</li>
  <li>includes only an empty implementation of x64Production.IExampleInterface</li>
  <li>has &lt;PlatformTarget&gt; set to x64 </li>
  </ul></li>
  </ul></li>
  <li>nunit can load and run the test assembly (once I've converted all the test attributes)
  
  <ul>
  <li>but is not a good short term solution to the larger problem (which involves a huge number of project files)</li>
  </ul></li>
  <li>the same issue arises whether the projects target 3.5 or 4.0</li>
  <li>the same issues arises whether the VS2008 or VS2010 c# compiler is used</li>
  <li>the same issue arises whether mstest from VS2010 or Test Agents is used</li>
  <li>it is mstest which fails while loading AnyCPUTestingx64Production - i.e this is not an issue with attempting to load the assembly in the wrong QTAgent (nothing shows up in Process Monitor and renaming QTAgent32.exe has no effect):</li>
  </ul>
  
  <pre class="lang-none prettyprint-override"><code>    *** Assembly Binder Log Entry  (09/02/2012 @ 09:44:26) ***
  
      The operation failed.
      Bind result: hr = 0x8007000b. An attempt was made to load a program with an incorrect format.
  
      Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
      Running under executable  C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe
      --- A detailed error log follows. 
  
      === Pre-bind state information ===
      LOG: User = David
      LOG: DisplayName = x64Production, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
       (Fully-specified)
      LOG: Appbase = file:///D:/
      LOG: Initial PrivatePath = NULL
      LOG: Dynamic Base = NULL
      LOG: Cache Base = NULL
      LOG: AppName = MSTest.exe
      Calling assembly : AnyCPUTestingx64Production, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
      ===
      LOG: This bind starts in default load context.
      LOG: Using application configuration file: C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe.Config
      LOG: Using host configuration file: 
      LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
      LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
      LOG: Attempting download of new URL file:///D:/x64Production.DLL.
      LOG: Assembly download was successful. Attempting setup of file: D:\x64Production.dll
      LOG: Entering run-from-source setup phase.
      LOG: Assembly Name is: x64Production, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
      ERR: Failed to complete setup of assembly (hr = 0x8007000b). Probing terminated.
  </code></pre>
  
  <p>Has anyone else ascertained whether or not this is simply unsupported in the VS2010 mstest?</p>