在 Linux 上运行的 TeamCity NUnitLauncher (mono) 给出"Corlib not in sync with this runtime"错误



使用mono的最新版本在Ubuntu 14.04 LTC上运行TeamCity构建代理来运行NUnit测试似乎存在一些依赖性问题,我一辈子都无法解决这些问题。我遵循了以下安装步骤

  • 4.0.1的Mono安装步骤
  • 团队城市构建代理

当TC构建代理启动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.

有什么可能的方法让它发挥作用吗?我试着删除了所有的部件,然后重新安装,甚至安装了一个旧版本的mono构建,但没有成功。

TC连接似乎可以工作,我可以手动调用mono,甚至可以手动调用nunit控制台。然而,TC提供的.exe版本似乎被认为是linux非专家版本。

请把我从依赖地狱救出来!!

编辑:我最终只是通过安装nunit-console并启用XML报表处理构建功能来解决问题,而不是摆弄corelib文件并破坏其他东西。

这是一个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决定更新插件,这可能会停止工作。

更换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/?

我就是这样处理的:(注意我的单声道在/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

这是一个黑客攻击,但它让我开始运行,直到出现正确的修复!

Steve

编译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

最新更新