运行 TeamCity 构建代理,使用单声道的最新版本 Ubuntu 14.04 LTC 运行 NUnit 测试似乎有一些依赖性问题,我不能解决我的生活。 我遵循了以下安装步骤
当TC Build Agent启动NUnit步骤时,它只会失败,并查看日志显示它执行
/usr/bin/mono-sgen /home/ubuntu/buildAgent/plugins/dotnetPlugin/bin/JetBrains.BuildServer.NUnitLauncher.exe
及时返回
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.
有没有办法让这个工作?我已经尝试删除所有部分并重新安装,甚至安装旧版本的单声道版本,但无济于事。
TC连接似乎有效,我可以自己手动调用和调用 mono ,甚至 nunit-console 但是TC提供的这个.exe版本似乎有被困为linux非专家。
请救我脱离地狱!!
编辑:我最后只是通过安装nunit-console
并启用XML报告处理构建功能来解决我的问题,而不是使用corelib文件并破坏其他内容。
答案 0 :(得分:3)
这是Mono错误,请参阅https://bugzilla.xamarin.com/show_bug.cgi?id=34675。
问题在于Mono仅以引用程序集的形式提供4.0程序集,包括mscorlib.dll。它们仅包含元数据,适用于编译器。通常,应用程序只会自动使用最新版本。
然而,Mono中的加载程序代码未更新为将TeamCity在其.exe.config文件中使用的v4.0.20506或v4.0.30128的显式运行时版本绑定到最新版本。运行时尝试从4.0目录加载mscorlib.dll,并且由于版本太旧(从生成引用程序集开始)就会出现问题。
作为一种变通方法,您可以编辑<build agent
installdir>/plugins/dotnetPlugin/bin/JetBrains.BuildServer.NUnitLauncher.exe.config
(以及其他.exe.config文件)
并删除以下行:
<supportedRuntime version="v4.0.20506"/>
<supportedRuntime version="v4.0.30128"/>
一旦TeamCity决定更新插件,这可能会停止工作。
答案 1 :(得分:2)
更换mscorlib版本只是要求麻烦 - 即TypeLoadException&和朋友们在附近等待你。
我所做的是用手动调用TC NunitLauncher替换Teamcity构建步骤,但强制它使用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 ";" -)
调用使用一些shell技巧来查找我对使用通配符感兴趣的所有程序集,但除此之外应该很容易理解。
如果Mono修复了他们破碎的4.0运行时,那就太好了。有人已经在https://bugzilla.xamarin.com/上报告过了吗?
答案 2 :(得分:0)
这是我解决这个问题的方法:(注意我的单声道是/ opt / mono)
$ cd /opt/mono/lib/mono
$ sudo mv 4.0 __4.0
$ sudo ln -s 4.5 4.0
即摆脱4.0文件夹和符号链接4.5为4.0
这是一个黑客攻击,但它让我开始运行,直到适当的修复表面!
史蒂夫答案 3 :(得分:0)
我在编译4.0.2后在我的Raspberry Pi上遇到了这个问题,但它是从/4.5 /
加载的这让我走了:
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