2009-08-14 8 views
2

Mit Team Foundation Build rufe ich die xunit.net-xunit-Task auf, die /platform:AnyCpu ist, aber mein TeamBuild-Aufruf von TFSBuild.proj ist vanilla.Laufender Teil einer TeamBuild als x64 [für xunit.net-Tests]

Ich habe eine Reihe von Tests, die x64 spezifisch sind (`/ platform: x64 '), die mit einer ImageFormatException ersticken. Ich habe auch eine Testversammlung, die x86 markiert wird, also kann es nicht alles oder nichts sein.

NUnit hat einen Plattformschalter für die MSBuild-Task, xunit doesnt.

ich der folgenden Ansätze denken kann:

  1. ein 64-Bit msbuild Kind Aufgabe aufrufen, um die xunit Aufgabe aufzurufen - ein ToolPath param ist nicht so, wenn das ist eine gute Idee, was ist die sauberste Exec Aufgabe Syntax um das zu tun, in der Kinderumgebung vorbei?
  2. Sonderfall der Aufruf des 64-Bit mit xunit.console.x64
  3. Schalter die gesamte Teambuild über x64 und Sonderfall der x86 (aber das landet mich nur in der umgekehrten Situation von needinn zu Sonderfall der x86) . (Ich gehe davon aus, dass auch andere, als wenn Sie sicher, benutzerdefinierte Aufgaben in der richtigen PROGRA machen ~ ... \ MsBuild dir, es wahrscheinlich geht mehr Ärger sein)

Was haben andere hatten Erfolg mit der Handhabung Themen wie Dies?

Antwort

4

xUnit.net führt seine Tests im selben Prozess wie der Runner in einer separaten AppDomain aus. Da MSBuild als 32-Bit-Only gekennzeichnet ist, müssen alle mit dem MSBuild xunit-Task ausgeführten Tests im 32-Bit-Modus ausgeführt werden.

Die einfachste Problemumgehung besteht darin, die MSBuild-Task nicht zu verwenden, sondern stattdessen zum Konsolen-Runner zu wechseln. Da dies einen neuen Prozess erstellt, wird es standardmäßig im 64-Bit-Modus ausgeführt. Wenn Sie die Betaversion 1.5 verwenden, haben wir auch EXEs integriert, die den 32-Bit-Modus (xunit.console.x86.exe) erzwingen können, wodurch Ihre 32- und 64-Bit-Testprobleme gelöst werden.

+0

Danke für die Bestätigung der Optionen. Während TeamBuild in VS08SP1 sehr x86 zentrisch ist, hat Msbuild selbst eine x64-Variante. Also für jetzt habe ich Option 1 verwendet - ich mache eine exec von der Framework64 msbuild, die dann die [anycpu] xunit Aufgabe in x64 Modus zieht und läuft wie gewünscht. Dies funktioniert am besten in meinem Kontext, da ich bereits eine MSBuild MSBuild-Aufgabe verwende, um über eine Reihe von Test-Assemblies in einer ItemGroup zu iterieren. ... macht das Sinn? –