2012-12-04 52 views
1

我正在配置我公司的構建服務器(運行CruiseControl.NET)以運行NUnit測試。爲了通過減少文件IO來提高構建時間,構建版本將使用自定義目標文件(基本上這裏顯示的是:How do I override CopyLocal (Private) setting for references in .NET from MSBUILD)關閉複製本地。但是,對於引用其他程序集的測試項目,在生成服務器上運行NUnit時,Copy Local = false會引發運行時程序集綁定錯誤(「無法加載文件或程序集」),因爲這些程序集未複製到測試項目。如何使用Copy Local = false在CruiseControl.NET中配置NUnit

我可以打開復制本地來獲得這個工作,但這會減慢構建。我想知道,有沒有一種策略可以用來在生成服務器上運行NUnit測試,同時保持Copy Local = false?我認爲這種情況在之前已經適用於其他人,而我錯過了一些明顯的事情。

供參考,在這裏是如何我在CruiseControl.NET構建配置運行的每個測試項目:你需要以某種方式找到引用的組件測試執行過程中

<exec> 
    <executable>nunit-console.exe</executable> 
    <baseDirectory>C:\Program Files\NUnit 2.6\bin</baseDirectory>  
    <buildArgs>C:\Source\UnitTests.csproj /xml:C:\BuildLogs;\$(ProjectName)\NUnitResults\nunit-results.xml</buildArgs> 
</exec> 
+1

文件拷貝真的需要多少額外的時間嗎?聽起來你可能需要一個更好的構建框,或者可能將構建拆分爲幾個處理單獨模塊的較小構建。 – Pedro

+0

@Pedro不幸的是,我沒有用於比較的任何數字,但我被告知這是構建時間的「顯着」增加(並且這匹配我所觀察到的)。你可能是對的,這歸結於構建盒(特別是磁盤)是瓶頸。如果我的設置沒有什麼奇怪的話,那麼這給了我一個彈藥來獲得更好的構建服務器:) –

回答

3

在運行時如。我想不出一個簡單的方法來避免最終複製到測試項目的輸出目錄,我不相信這最終複製行爲會顯着減慢構建過程。

如果您有大量項目的巨大解決方案,並且許多依賴項在組件中複製可能是個問題。

例子:

讓我們假設你有一個名爲AZ 26個項目與A您的解決方案取決於什麼,B取決於AC取決於B ...你的想法。 Z是你的測試項目。正如我所說:我無法想象在測試執行期間,在輸出目錄Z中避免使用A.dllY.dll

如果保留標準項目配置A編譯爲A.dll並複製到[SolutionDir]\A\bin\[Configuration]\。然後將B編譯爲B.dll並與A.dll一起復制到[SolutionDir]\B\bin\[Configuration]\。然後將C編譯爲C.dll並與A.dllB.dll一起復制到[SolutionDir]\C\bin\[Configuration]\。這樣A.dll被複制26次,B.dll被複制25次,依此類推。

在這種情況下,我的建議是讓所有項目的輸出目錄指向單個解決方案輸出目錄,例如[SolutionDir]\bin。這是渦輪增壓我們的構建過程。

+0

謝謝,我也在考慮組件的「主」輸出目錄,但認爲正確的方法(沒有額外的工作)是使用測試項目的輸出bin目錄。我認爲我在這裏遇到的真正問題是硬件種類繁多(構建帶有磁盤IO問題的服務器),而不是如何設置構建配置。當我獲得硬件時,我將切換到CopyLocal = true。 –

相關問題