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

本文关键字:运行 单元测试 程序集 何避免 复制 引用 | 更新日期: 2023-09-27 18:12:52

我正在使用TeamCity构建一个。net产品。

我想把所有的解决方案输出集合到一个文件夹下。

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

我们有一个很大的项目。sln文件,其中大多数是引用我们的API程序集,有些是相互引用解决方案中的其他项目。

虽然这是OK的调试,我希望能够拾取只每个项目的输出,并在构建成功后将其复制到某个文件夹,而不将引用的文件复制到该文件夹。

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

我似乎无法解决这个问题,除非运行两次构建(一次用于运行测试,另一次用于实际获得一组"干净"的文件夹以进行复制)。

对于管理这样的构建有什么建议吗?

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

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

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

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

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

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

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