Msbuild 如何将动态生成的项目集的输出聚合到单个文件夹中

Msbuild 如何将动态生成的项目集的输出聚合到单个文件夹中,msbuild,continuous-integration,teamcity,Msbuild,Continuous Integration,Teamcity,我需要将所有测试程序集及其依赖项和配置文件收集到一个文件夹中。该过程应该保留每个测试项目输出的目录结构。我们有一个需要手动将测试项目附加到主项目的解决方案,但是我们的解决方案有太多的项目,无法维护。应根据命名约定x.UnitTest.csproj、y.IntegrationTest.csproj自动定位这些文件 在后台,我们正在使用一个构建系统,该系统在代理之间传递工件、二进制文件等。我们在一个代理上编译,在其他代理上测试。测试项目之间程序集的大量重复正在减慢构建过程 我所做的: 我有一个csp

我需要将所有测试程序集及其依赖项和配置文件收集到一个文件夹中。该过程应该保留每个测试项目输出的目录结构。我们有一个需要手动将测试项目附加到主项目的解决方案,但是我们的解决方案有太多的项目,无法维护。应根据命名约定x.UnitTest.csproj、y.IntegrationTest.csproj自动定位这些文件

在后台,我们正在使用一个构建系统,该系统在代理之间传递工件、二进制文件等。我们在一个代理上编译,在其他代理上测试。测试项目之间程序集的大量重复正在减慢构建过程

我所做的: 我有一个csproj,它引用了大多数测试项目。这会将二进制文件和依赖项放在一个文件夹中。 2我能够使用此功能识别要复制的所有文件

<CreateItem
  Include="%(ProjectReference.RootDir)%(ProjectReference.Directory)$(OutDir)*.config">
<Output TaskParameter="Include" ItemName="TestConfigurationFiles"/>
</CreateItem>

<Copy
        SourceFiles="@(TestConfigurationFiles)"
        DestinationFolder="$(OutDir)">
</Copy>
我尝试过最明显的事情,比如

MsBuild任务:RebaseOutputs属性,重写OutDir属性。我可以为msbuild任务提供一组动态生成的输出,但只能在默认文件夹中生成它们

挂钩到目标输出的 msbuild任务只提供主 输出组件不带 依赖关系

我一直在尝试复制 配置文件。这让他们 在 作为app.config的依赖项目不可用 dllname.config,而不是在 最后一个项目

可以让这更好的解决方案可能包括

提供编译前动态添加到projectreference项数组的示例

使用msbuild targetOutput创建文件夹中所有文件的列表,而不仅仅是主输出,并复制到目标文件夹


今天我使用的是msbuild 3.5。理想情况下,该解决方案将与msbuild 3.5配合使用。我们很快就要过渡到.NET 4/MsBuild 4了,因此,如果必须在.NET 4中完成,那也可以。

导出工件时是否考虑过展平文件夹结构

比如:

src/*.UnitTest*/bin/**/*.* -> /testlibs
src/*.IntegrationTest*/bin/**/*.* -> /testlibs

我需要维护文件夹结构。