我有一个复杂的解决方案(在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
并删除了本地mono 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
我错了什么?
答案 0 :(得分:4)
构建工具通常不会解析GAC中的程序集(可能作为最后的手段除外)。在.NET上,他们在注册表中注册了“汇编文件夹”。在Mono上,他们使用“pkgconfig”。你可能已经删除了nunit程序集但是没有删除或修复pkgconfig(“pc”)文件,该文件告诉xbuild和MonoDevelop在哪里找到dll。
这种东西是改变包装安装的东西的一个坏主意。您应该正确卸载软件包,或者使用适当的环境变量来覆盖打包的东西。
在这种情况下,我建议您为新的nunit程序集创建一个pc文件,并将其放入/ usr / local / lib / pkgconfig目录(/ usr / local是安装从源代码构建的东西的前缀),或者将它放在其他地方并将其包含在PKG_CONFIG_PATH环境变量中。
另见:
有关配置Mono环境的一般背景信息,请参阅:
答案 1 :(得分:2)
我将尝试将NUnit 2.9.3复制到我的源文件夹,例如(solution folder)\ lib。然后在本地添加此引用,并确保标记与此本地路径匹配。
当配置它时,我认为xbuild应该直接使用此本地副本而不是读取GAC或其他预配置路径。如果没有,我会向Mono团队报告一个错误。
答案 2 :(得分:2)
单声道编译器的/ pkg选项对我来说很好......
dmcs test.cs /r:System.Configuration.dll /r:System.dll /pkg:nunit
FWIW,我使用apt-get包管理器安装了nunit(在Ubuntu上)......
sudo apt-get install nunit