Home > Softwareentwicklung > NUnit mit .NET 4.0 Assemblies verwenden

NUnit mit .NET 4.0 Assemblies verwenden

July 19th, 2010 Bernd

lightbulb Bei unseren Projekten stellen wir gerade von Visual Studio 2008 auf Visual Studio 2010 mit .NET 4.0 um. Der Umstieg läuft recht problemlos. Die Unittests sind alle mit dem NUnit Unittest Framework entwickelt. Ein kurzer Blick auf die NUnit Homepage zeigt, dass die aktuelle Version 2.5.5 mit .NET 4.0 funktioniert. Also, Version runtergeladen, entpackt und alles kompiliert noch. Als Entwickler verwende ich den Unittestrunner von Resharper. Und siehe da, alle Tests laufen noch und sind grün. Perfekt!

Auf dem Buildrechner sieht es leider nicht so gut aus. Die Unittests laufen überhaupt nicht mehr. Dort werden die Tests mit dem Consolerunner von NUnit ausgeführt. Ein Aufruf desselben auf meinem Rechner bringt folgende (bzw. eine ähnliche) Ausgabe:

Execution Runtime: net-2.0
Unhandled Exception:
System.BadImageFormatException: Could not load file or assembly ‘C:\Users\Bernd\documents\visual studio 2010\Projects\SomeProjects\SomeProject.Unittests\bin\Debug\SomeProject.Unittests.dll’ or one of
its dependencies. This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded.
File name: ‘C:\Users\Bernd\documents\visual studio 2010\Projects\SomeProjects\SomeProject.Unittests\bin\Debug\SomeProject.Unittests.dll’

Was ist da los?

Die NUnit Assemblies selbst sind mit .NET 2.0 kompiliert. Der Consolerunner von NUnit läuft also auch mit der CLR 2.0 und kann somit keine Assemblies laden, die mit .NET 4.0 erstellt wurden. Glücklicherweise haben die Entwickler von NUnit genau für diese Fälle einen Kommandozeilenparameter für nunit-console.exe eingebaut. Mit dem Schalter “/framework” kann man angeben mit welcher .NET Runtime die Test ausgeführt werden sollen. Der korrekte Aufruf lautet also:

nunit-console.exe /framework:v4.0.30319 bin\Debug\SomeProject.Unittests.dll

Jetzt tritt keine Exception mehr auf und die Tests laufen auch auf der Console sauber durch.

Der Schalter war übrigens vor dem Umstieg (es wurde .NET 3.5 SP1 verwendet) nicht notwendig, da .NET 3.5 dieselbe CLR wie .NET 2.0 verwendet.

Kick it on dotnet-kicks.de
Categories: Softwareentwicklung Tags: , ,
  1. Nils
    July 29th, 2010 at 11:45 | #1

    Hallo Bernd,
    super Hinweis. Wie sieht es mit der coverage aus? Überprüsfs Du die coverage? Ich habe bisher immer NCover 1.5.8 verwendet – das scheint mit .NET 4.0 nicht mehr zu funktionieren. ..

  2. Bernd
    July 29th, 2010 at 11:50 | #2

    Hallo Nils,
    bisher machen wir keine Coveragemessungen. Hier bin ich noch am überlegen, was für uns die beste Strategie ist. Ich kann Dir leider nicht sagen, ob NCover 1.5.8 noch mit .NET 4 zusammenarbeitet.
    -Bernd

  1. No trackbacks yet.
Comments are closed.