2011-02-02 26 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