MSBuild:将多个文件复制到多个位置

时间:2018-12-12 11:28:39

标签: .net msbuild file-copying

我想将项目中的各种文件复制到输出文件夹中。但是,没有规则应该复制哪些文件,哪些不应该复制,因此我不能可靠地使用**通配符。

我想出了类似这样的东西:

  <Target Name="CopyMyFiles">
    <ItemGroup>
      <FilesToCopyToOutput Include=".\folder1\*.dat" />
      <FilesToCopyToOutput Include=".\folder2\*" />
      <FilesToCopyToOutput Include=".\folder3\*.txt" />
    </ItemGroup>
    <Message Text="Copying files..."/>

    <Copy SourceFiles="@(FilesToCopyToOutput)" 
          DestinationFolder="%(OutputFolder)\files"/>
  </Target>

但是问题是这不能保留文件夹结构,因此“ folder1”,“ folder2”,...丢失了,所有文件最终都放在一个目录中。我注意到,如果不使用通配符,就无法使用%(FilesToCopyToOutput.RecursiveDir)

我希望此复制过程尽可能自动化,因为要复制的文件列表经常更改,因此我希望避免在需要为每个文件夹添加专用复制任务时避免这种情况。< / p>

编辑:至此,我提出了以下建议

  <Target Name="CopyMyFiles">
    <ItemGroup>
      <FilesToCopyToOutput Include=".\folder1\*.dat" />
      <FilesToCopyToOutput Include=".\folder2\*" />
      <FilesToCopyToOutput Include=".\folder3\*.txt" />
    </ItemGroup>
    <Message Text="Copying files..."/>

    <Copy SourceFiles="@(FilesToCopyToOutput)" 
          DestinationFolder="%(OutputFolder)\files\%(FilesToCopyToOutput.RelativeDir)"/>
  </Target>

根据文档,“ RelativeDir”属性包含指定的路径,直到最后一个“ \”为止。没关系,但是如果使用“%(ProjectDir)参数定义路径,则可能会有些棘手。

目前,我将使用此方法,但是很高兴听到是否有解决此问题的更好方法。

0 个答案:

没有答案