4

I installed NUnit 2.6.1 and trying to run a simple test on Windows 7 x64. It causes an exception

An attempt was made to load a program with an incorrect format. You may be attempting to load an assembly built with a later version of the CLR than the version under which NUnit is currently running (2.0.50727) or trying to load a 64-bit assembly into a 32-bit process.

It is pretty weird because nunit.exe.config looks like below

  <?xml version="1.0" encoding="utf-8" ?> 
- <configuration>
- <!-- 
   The GUI only runs under .NET 2.0 or higher. The
   useLegacyV2RuntimeActivationPolicy setting only
   applies under .NET 4.0 and permits use of mixed 
   mode assemblies, which would otherwise not load 
   correctly.


  --> 
- <startup useLegacyV2RuntimeActivationPolicy="true">
- <!--  Comment out the next line to force use of .NET 4.0 
  --> 
- <!--  <supportedRuntime version="v2.0.50727" /> 
  --> 
  <supportedRuntime version="v4.0.30319" /> 
  </startup>
- <runtime>
- <!--  Ensure that test exceptions don't crash NUnit 
  --> 
  <legacyUnhandledExceptionPolicy enabled="1" /> 
- <!--  Run partial trust V2 assemblies in full trust under .NET 4.0 
  --> 
  <loadFromRemoteSources enabled="true" /> 
- <!--  Look for addins in the addins directory for now 
  --> 
- <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <probing privatePath="lib;addins" /> 
  </assemblyBinding>
  </runtime>
  </configuration>
Alexandre
  • 13,030
  • 35
  • 114
  • 173

1 Answers1

7

This doesn't sound like a problem with NUnit. This sounds like your unit test assemblies are not built for a 32 bit process. Are you sure your unit test assemblies are built for 32 bit? If NUnit is running 32 bit and your assemblies are built at 64 bit (or not built as Any CPU) you'll get this problem. The calling application determines the bit depth required of the assembly. You can't use 64 bit dll's with a 32 bit process and vice versa.

The only reason I mention this is because your question says you are trying to RUN the test. If NUnit was configured incorrectly it wouldn't even start.

devshorts
  • 8,572
  • 4
  • 50
  • 73
  • Don't understand you. NUnit is 64 bit, right? My system is 64 bit too and a program I need to test is also 64 bit. Where is a problem? – Alexandre Sep 19 '12 at 16:18
  • 2
    The problem is you are building 64 bit dll's but running NUnit in 32 bit mode. Are you sure you are running the 64 bit of NUnit? There is a separate executable for 64 bit. Or you are doing it the other way, you are running 64 bit NUnit and loading 32 bit dll's. Either way something is mismatched and it's unhappy – devshorts Sep 19 '12 at 16:28
  • No, I'm not. How do I run it(NUnit) in 64 mode? <> Actually, I don't know. How do I know it? – Alexandre Sep 19 '12 at 16:29
  • 1
    From the Nunit site: "NUnit on 64-Bit Platforms The .NET 2.0 version of nunit.exe is built using /platform:anycpu, which causes it to be jit-compiled to 32-bit code on a 32-bit system and 64-bit code on a 64 bit system. This causes an exception when NUnit is used to test a 32-bit application on a 64-bit system. To avoid this problem, use nunit-x86.exe , which is built using /platform:x86, when testing 32-bit code on a 64-bit system." – devshorts Sep 19 '12 at 16:30
  • Keep in mind ANY dll your libraries are linking against has to be of the right bit depth for this to work. – devshorts Sep 19 '12 at 16:31
  • Now it's working. However I can't create a 64 bit app in spite of I have 64 bit Windows. Dropdownlist in project->properties->build has only one value, it's 'Active(x86)' for some reason. Why? – Alexandre Sep 19 '12 at 16:36
  • That's a project configuration and you can make that a separate question :) – devshorts Sep 19 '12 at 16:38