2012-12-04 49 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。 –

相关问题