2015-05-01 3 views
6

Ausführen eines Teamcity Build-Agent NUnit Tests auf Ubuntu 14.04 LTC mit der neuesten Version von mono erscheint laufen einige Abhängigkeitsprobleme zu haben, die ich für das Leben von mir nicht lösen kann. Ich habe folgte die folgenden InstallationsschritteTeamcity NUnitLauncher unter Linux (mono) gibt "Corlib nicht synchron mit dieser Laufzeit" Fehler

Wenn der TC-Agent Erstellen Sie die NUnit Schritt beginnt, ist es nicht einfach, und in den Protokollen der Suche zeigt es führt

/usr/bin/mono-sgen /home/ubuntu/buildAgent/plugins/dotnetPlugin/bin/JetBrains.BuildServer.NUnitLauncher.exe 

, die prompt mit

zurückkehrt
Corlib not in sync with this runtime: expected corlib version 117, found 111. 
Loaded from: /usr/lib/mono/4.0/mscorlib.dll 
Download a newer corlib or a newer runtime at http://www.mono-project.com/download. 

Gibt es einen möglichen Weg, dies zum Laufen zu bringen? Ich habe versucht, alle Teile zu entfernen und neu zu installieren und sogar eine ältere Version von Mono-Build zu installieren, aber ohne Erfolg.

Die TK-Verbindung scheint zu funktionieren und ich kann manuell aufrufen und mono auf seine eigene nennen und sogar nunit-Konsole jedoch diese .exe Build von TC zur Verfügung gestellt scheint, als Linux-Laie ratlos zu sein.

Bitte rette mich aus Abhängigkeit Hölle !!

bearbeiten: Ich landete nur durch mein Problem zu lösen nunit-console installieren und aktivieren Sie die XML-Bericht Verarbeitung Build-Funktion anstatt mit den corelib Dateien spielen, um und brechen etwas anderes.

Antwort

0

Dies ist, wie ich um ihn gearbeitet: (beachten Sie meine mono in/opt/mono)

$ cd /opt/mono/lib/mono 
$ sudo mv 4.0 __4.0 
$ sudo ln -s 4.5 4.0 

dh der 4.0-Ordner loszuwerden und Symlink die 4.5 4.0

Dies sein soll etwas von einem Hack, aber es hat mich aufgerichtet und läuft, bis eine richtige Reparatur Oberflächen!

Steve

+0

Danke für den Tipp, aber das endete gerade mit einem weiteren Fehler! Am Ende habe ich einfach den Befehlsschritt "nunit-console" ausgeführt und die Build-Funktion für die XML-Berichtsverarbeitung aktiviert. Obwohl die Tests nicht zum Server zurückgestreamt werden, wird der Job vorerst erledigt. – Rob

0

hatte ich dieses Problem auf meinem Raspberry Pi nach 4.0.2 kompilieren, aber es wurde von /4.5/

Laden Das hat mich gehen:

sudo mv /usr/lib/mono/4.5/mscorlib.dll /usr/lib/mono/4.5/_old_mscorlib.dll 
sudo cp /opt/mono-4.0.2/lib/mono/4.5/mscorlib.dll /usr/lib/mono/4.5 
2

Ersetzen der mscorlib Version bittet nur um Ärger - also warten TypeLoadException und Freunde um die Ecke, um dich zu holen.

Ich habe den Teamcity-Build-Schritt durch einen manuellen Aufruf des TC NunitLauncher ersetzt, aber gezwungen, Mono 4 zu verwenden.5:

mono --runtime=4.5 /Applications/buildAgent/plugins/dotnetPlugin/bin/JetBrains.BuildServer.NUnitLauncher.exe v4.0 MSIL NUnit-2.6.3 $(find **/bin/Release/*Tests.dll | paste -sd ";" -) 

Der Aufruf verwendet einige Shell-Tricks alle Baugruppen finden ich bei der Verwendung einer Wildcard interessiert bin, aber anders als das sollte einfach zu verstehen sein.

Es wäre schön, wenn Mono ihre defekte 4.0 Laufzeit reparieren würde. Jeder hat es bereits auf https://bugzilla.xamarin.com/ gemeldet?

3

Dies ist ein Mono-Bug, siehe https://bugzilla.xamarin.com/show_bug.cgi?id=34675.

Das Problem ist, dass Mono zur Bereitstellung der 4.0-Assemblys, einschließlich mscorlib.dll, nur in Form von Referenz-Assemblys verschoben wurde. Sie enthalten nur Metadaten und sind für den Compiler gedacht. Normalerweise verwenden Anwendungen nur die neueste Version automatisch.

Der Ladecode in Mono wurde jedoch nicht aktualisiert, um eine explizite Laufzeitversion von v4.0.20506 oder v4.0.30128, die TeamCity in ihren .exe.config-Dateien verwendet, an die neueste Version zu binden. Die Laufzeit versucht stattdessen, mscorlib.dll aus dem 4.0-Verzeichnis und den Bails zu laden, da die Version zu alt ist (ab dem Zeitpunkt, zu dem die Referenzassemblys generiert wurden).

Als Abhilfe können Sie <build agent installdir>/plugins/dotnetPlugin/bin/JetBrains.BuildServer.NUnitLauncher.exe.config (und andere .exe.config Dateien) bearbeiten und entfernen Sie die folgenden Zeilen:

<supportedRuntime version="v4.0.20506"/> 
<supportedRuntime version="v4.0.30128"/> 

Dieser Anschlag könnte arbeiten einmal Teamcity entscheidet obwohl das Plugin zu aktualisieren.

+0

Ich kann bestätigen, dass das funktioniert. Nicht sicher über den Status des Mono-Bugs, kann nicht darauf zugreifen (nicht autorisiert). Es scheint, dass das Update nicht in der aktuellen monostabilen Version (momentan) ist. –

+0

Aktueller Status: Ich habe den zugrundeliegenden Fehler mit https://github.com/mono/mono/pull/2148 behoben, aber es wird nicht in das kommende Mono 4.2 kommen. Ich werde sicherstellen, dass es danach in der ersten Service-Version enthalten ist. –