如何使用Copy Local = false在CruiseControl.NET中配置NUnit

时间:2012-12-04 16:51:36

标签: .net nunit cruisecontrol.net

我正在配置我公司的构建服务器(运行CruiseControl.NET)以运行NUnit测试。为了通过减少文件IO来缩短构建时间,构建设置为使用自定义目标文件关闭Copy Local(基本上显示在此处:How do I override CopyLocal (Private) setting for references in .NET from MSBUILD)。但是,在构建服务器上为引用其他程序集的测试项目运行NUnit时,Copy Local = false会引发运行时程序集绑定错误(“无法加载文件或程序集”),因为这些程序集不会复制到该目录的/ bin目录中。测试项目。

我可以打开“复制本地”以使其工作,但这会降低构建速度。我想知道,是否有一种策略可以用来在构建服务器上运行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 个答案:

答案 0 :(得分:3)

在运行时,例如,在测试执行期间,您需要以某种方式定位引用的程序集。我想不出一个简单的方法来避免最终复制到测试项目的输出目录,我不相信这个最终的复制操作会大大减慢你的构建过程。

如果您有一个包含大量项目的大型解决方案,并且许多依赖项复制可能是一个问题。

示例:

假设您的解决方案中有AZ的26个项目A取决于任何内容,B取决于A,{{1 }取决于C ...你明白了。 B是你测试项目。正如我所说:在测试执行期间,我无法想到避免在Z的输出目录中使用A.dllY.dll的方法。

如果您保持标准项目配置Z已编译为A并已复制到A.dll。然后[SolutionDir]\A\bin\[Configuration]\汇编为B并与B.dll一起复制到A.dll。然后[SolutionDir]\B\bin\[Configuration]\汇编为C,并与C.dllA.dll一起复制到B.dll。这种方式[SolutionDir]\C\bin\[Configuration]\被复制26次,A.dll被复制25次,依此类推。

在这种情况下,我的建议是让所有项目的输出目录指向单个解决方案输出目录,例如B.dll。这就是涡轮增压我们的构建过程。