如何避免复制引用程序集并能够运行单元测试

时间:2011-10-30 15:32:52

标签: c# build continuous-integration teamcity

我正在使用TeamCity构建.NET产品。

我想获取所有解决方案的输出并将它们收集在一个文件夹下。

为了做到这一点,我想为所有项目将CopyLocal设置为false,这样当我复制* / .dll时,它不会复制冗余文件。

我们有一个包含项目的大型.sln文件,其中大部分都是引用我们的API程序集,有些是从解决方案中引用其他项目。

虽然这对于调试是可以的,但我希望能够仅在每个项目的输出中拾取并在构建成功后将其复制到某个文件夹,而不会将引用的文件复制到该文件夹​​中。

同时,在删除被复制的引用文件时,运行单元测试在构建服务器上不起作用,因为其中一些需要引用程序集。

我似乎无法解决这个问题,无需运行构建两次(一个用于运行测试,另一个用于实际获取要从中复制的“干净”文件夹)。

有关管理此类构建的任何建议吗?

1 个答案:

答案 0 :(得分:1)

我不确定您实际使用的是什么来运行您的构建。您使用的是像msbuild或nant这样的构建脚本吗?或使用内置的TeamCity构建步骤?

如果您正在使用MsBuild,那么您可以使用以下命令获取所有已编译程序集的路径:

<MSBuild Projects="@(Solutions)" Targets="Rebuild">
  <Output ItemName="Outputs" TaskParameter="TargetOutputs"/>
</MSBuild>    

输出 现在将包含每个程序集的完整路径。这意味着您现在可以添加额外的步骤将这些文件复制到其他地方进行存储,或者您可以在运行单元测试后删除所有其他不需要的文件(例如干净),例如。

<CreateItem Include="$(BuildOutputDir)\**\*.*" Exclude="@(Outputs)">
  <Output TaskParameter="Include" ItemName="FilesToClean"/>
</CreateItem>

<Delete Files="@(FilesToClean)" />

我无法测试上面的内容,因为我不在我的开发机器上,但希望有帮助