【问题标题】:Can't build NUnit testing project under Mono and LinuxMono和Linux下无法构建NUnit测试项目
【发布时间】:2011-02-02 20:19:08
【问题描述】:

我有一个复杂的解决方案(在 Windows 下开发,在 GNU\Linux 下部署),其中包含许多单元测试项目,使用 NUnit 2.9.3。

这是来自项目的参考:

<Reference Include="nunit.framework, Version=2.9.3.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\..\..\Program Files\NUnit 2.9.3\bin\net-4.0\nunit.framework.dll</HintPath>
</Reference>

我从 source 下载并构建了 NUnit 2.9.3:

$ xbuild solutions/MonoDevelop/NUnit.Framework.sln /p:Configuration=Release

并安装到 GAC:

$ gacutil /i solutions/MonoDevelop/bin/Release/nunit.framework.dll

$ gacutil /l nunit.framework
The following assemblies are installed into the GAC:
nunit.framework, Version=2.9.3.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77
Number of items = 1

并删除了本地单 nunit 安装:

$ rm /usr/lib/mono/2.0/nunit*
$ rm /usr/lib/mono/4.0/nunit*

但是当我尝试构建我的解决方案时:

$ xbuild MySolution.sln | grep error

: error CS0006: Metadata file `/usr/lib/mono/2.0/nunit.framework.dll' could not be found

我做错了什么?

【问题讨论】:

    标签: c# unit-testing mono nunit xbuild


    【解决方案1】:

    构建工具通常不会从 GAC 解析程序集(可能作为最后手段除外)。在 .NET 上,他们在注册表中注册了“程序集文件夹”。在 Mono 上,他们使用“pkgconfig”。您可能已经删除了 nunit 程序集,但没有删除或修复告诉 xbuild 和 MonoDevelop 在哪里找到 dll 的 pkgconfig(“pc”)文件。

    这种东西就是为什么改变包安装的东西是个坏主意的原因。您应该正确卸载软件包,或者使用适当的环境变量来覆盖打包的东西。

    在这种情况下,我建议您为新的 nunit 程序集创建一个 pc 文件,并将其放入 /usr/local/lib/pkgconfig 目录(/usr/local 是安装从源代码构建的东西的前缀),或者将其放在其他位置并将其包含在 PKG_CONFIG_PATH 环境变量中。

    另见:

    有关配置 Mono 环境的一般背景信息,请参阅:

    【讨论】:

    • 我删除了/usr/lib/pkgconfig/mono-nunit.pc,但这并没有帮助
    • 您使用的是哪个版本的单声道?尝试删除 - ~/.config/xbuild/pkgconfig-cache-2.xml 。如果您仍然收到错误,则使用“/v:diag”运行 xbuild,这将为您提供有关 xbuild 为何选择该特定路径来解析 nunit 引用的信息。
    • 非常感谢,迈克尔!清洁pkgconfig-cache-2.xml.
    • @Michael:下次从主干构建 Mono 时,如何防止 Mono 安装 NUnit?
    【解决方案2】:

    我将尝试将 NUnit 2.9.3 复制到我的源文件文件夹,例如(解决方案文件夹)\lib。然后在本地添加这个引用,并确保标签匹配这个本地路径。

    配置后,我认为 xbuild 应该直接使用这个本地副本,而不是读取 GAC 或其他预配置路径。如果没有,我会向 Mono 团队报告一个错误。

    【讨论】:

      【解决方案3】:

      单声道编译器的 /pkg 选项对我来说很好用...

      dmcs test.cs /r:System.Configuration.dll /r:System.dll /pkg:nunit
      

      FWIW,我使用 apt-get 包管理器(在 Ubuntu 上)安装了 nunit ...

      sudo apt-get install nunit
      

      【讨论】:

      • Unix 上的/pkg 等效项似乎是-pkg(不是--pkg)。 +1
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-30
      • 2013-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多