2015-05-01 9 views
6

Prowadzenie TeamCity agenta build do uruchomienia NUnit testy na Ubuntu 14.04 LTC z najnowszej kompilacji Pojawia mono mieć pewne problemy z zależnościami, których nie potrafię rozwiązać przez całe życie. Śledzę następujące instalacja krokiTeamCity NUnitLauncher działa na Linux (mono) daje "Corlib nie zsynchronizowany z tym starcie" Błąd

Kiedy TC Budowanie agenta rozpoczyna etap NUnit, to po prostu się nie powiedzie, a patrząc na logi pokazuje, że wykonuje

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

która natychmiast wraca z

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. 

Czy jest jakiś sposób, aby to zadziałało? Próbowałem usunąć wszystkie elementy i ponownie zainstalować, a nawet zainstalować starszą wersję mono-build, ale bezskutecznie.

połączenie

TC wydaje się działać i mogę ręcznie wywołać i nazywają mono na własną rękę, a nawet nunit-konsolę ten .exe build świadczone przez TC Wydaje się jednak, że być zakłopotany jak Linux nie-eksperta.

Proszę, uratuj mnie od piekła zależności!

Edit: skończyło się tylko mój problem rozwiązać instalując nunit-console i włączenie funkcji build przetwarzania raportu XML zamiast bawić z corelib plików i złamać coś innego.

Odpowiedz

0

ten sposób pracowałem wokół niego: (uwaga moja mono jest w/opt/mono)

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

czyli pozbyć folderze 4.0 i podlinkowujemy długości 4,5 za 4,0

Jest coś z hackowania, ale działa i działa, dopóki nie poprawi powierzchni!

Steve

+0

Dzięki za podpowiedź, ale skończyło się kolejnym błędem! Skończyło się na tym, że użyłem kroku komendy "konsoli nunitowej" wraz z włączeniem funkcji budowania przetwarzania raportów XML. Mimo że testy nie są przesyłane z powrotem do serwera, wykonuje on teraz pracę. – Rob

0

miałem ten problem na moim Raspberry Pi po kompilacji 4.0.2 ale było ładowanie od /4.5/

To dało mi idzie:

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

Wymiana wersji mscorlib prosi tylko o kłopoty - np. TypeLoadException i znajomi czekają za rogiem, aby cię dostać.

To, co zrobiłem, to zastąpienie kroku budowania Teamcity ręcznym wywołaniem TC NunitLauncher, ale zmusiło go do użycia Mono 4.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 ";" -) 

Wywołanie używa niektóre powłoki sztuczek, aby znaleźć wszystkie zespoły Jestem zainteresowany wykorzystaniem symbolu wieloznacznego, ale poza tym powinny być proste do zrozumienia.

Byłoby miło, gdyby Mono naprawił swoje zepsute 4.0. Ktoś już zgłosił to na https://bugzilla.xamarin.com/?

3

To jest błąd Mono, patrz https://bugzilla.xamarin.com/show_bug.cgi?id=34675.

Problem polega na tym, że Mono przestawił się na dostarczanie złożeń 4.0, w tym mscorlib.dll, tylko w formie zestawów referencyjnych. Zawierają tylko metadane i są przeznaczone dla kompilatora. Zwykle aplikacje automatycznie używają najnowszej wersji.

Kod programu ładującego w Mono nie został jednak zaktualizowany, aby powiązać z nim jawną wersję środowiska wykonawczego v4.0.20506 lub v4.0.30128, z której TeamCity korzysta w swoich plikach .exe.config do najnowszej wersji. Środowisko wykonawcze zamiast tego próbuje załadować plik mscorlib.dll z katalogu 4.0 i poręczeń, ponieważ wersja jest zbyt stara (od momentu wygenerowania zestawów referencyjnych).

Jako obejście można edytować <build agent installdir>/plugins/dotnetPlugin/bin/JetBrains.BuildServer.NUnitLauncher.exe.config (i inne pliki .exe.config) i usuń następujące wiersze:

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

To może przestać działać po TeamCity zdecyduje się zaktualizować wtyczkę chociaż.

+0

Potwierdzam, że to działa. Nie jesteś pewien statusu błędu Mono, nie masz do niego dostępu (nie autoryzowany). Wygląda na to, że poprawka nie znajduje się w obecnej wersji stabilnej mono (jak na razie). –

+0

Obecny status: Naprawiłem błąd podstawowy pod adresem https://github.com/mono/mono/pull/2148, ale nie uda się go wprowadzić w nadchodzącą wersję Mono 4.2. Upewnię się, że jest on dołączony do pierwszego wydania usługi po tym. –