2011-02-02 29 views
1

我有一个使用NUnit 2.9.3的复杂解决方案(在Windows下开发,部署在GNU \ Linux下)和许多单元测试项目。无法在Mono和Linux下构建NUnit测试项目

下面是从项目的引用:

<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 

什么我错了吗?

回答

4

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

这种东西是为什么改变软件包安装的东西是一个坏主意。您应该正确卸载软件包,或者使用适当的环境变量来重写打包的东西。在这种情况下,我建议你为新的nunit程序集创建一个pc文件,并将其放到/ usr/local/lib/pkgconfig目录中(/ usr/local是安装你从源代码),或者把它放在别的地方,并把它放在PKG_CONFIG_PATH环境变量的其他地方。

参见:

以及有关配置单环境的一般资讯,请参阅:

+0

我删除了`/ usr/lib/pkgconfig/mono-nunit.pc`但是没有帮助 – abatishchev 2011-02-03 17:20:09

+1

你正在使用哪个版本的mono?尝试删除〜〜/ .config/xbuild/pkgconfig-cache-2.xml。如果仍然出现错误,则使用“/ v:diag”运行xbuild,它会告诉您为什么xbuild会选择解析nunit引用的特定路径。 – radical 2011-02-10 11:22:48

2

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

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

2

的/ PKG单编译器选项工作得很好,我...

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

FWIW,我使用apt-get的包管理器(在Ubuntu)安装NUnit的...

sudo apt-get install nunit