代码之家  ›  专栏  ›  技术社区  ›  Precipitous

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

  •  0
  • Precipitous  · 技术社区  · 14 年前

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

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

    我所做的: 1)我有一个引用大多数测试项目的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 targetoutputs创建文件夹中所有文件的列表(而不仅仅是主输出)并复制到目标文件夹。

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

    1 回复  |  直到 14 年前
        1
  •  0
  •   mattk    14 年前

    在导出工件时,是否考虑扁平化文件夹结构?

    比如:

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