如何在不重写MSBuild的情况下将多个文件复制到同一目录

时间:2011-03-08 09:03:41

标签: msbuild copy unique

我在单独的目录中有多个CodeCoverage.xml文件,我想将它们复制到一个具有新名称的目录,以便它们不会被覆盖。

<ItemGroup>
    <CoverageResultsXmlFiles Include="$(TestResultsDir)\**\CodeCoverage.xml" />
</ItemGroup>  

有没有人知道如何将这些文件复制到$(TestResultsDir)而不会被覆盖?

有没有办法生成一个可以预先添加到文件名的随机数,这样它们就是唯一的?

1 个答案:

答案 0 :(得分:0)

您可以使用MSBuild 4.0功能执行此操作:

  <Target Name="CopyCodeCoverage">
       <PropertyGroup>
           <DirIdentity>$(RecursiveDir.Replace(" ", "_"))</DirIdentity> 
           <DirIdentity>$(DirIdentity.Replace("\", "_"))</DirIdentity> 
           <UniqueIdentity>$([System.IO.Path]::GetRandomFileName())</UniqueIdentity>
           <DestCodeCoverage>$(DestinationDir)\$(DirIdentity)_$(UniqueIdentity)_CodeCoverage.xml</DestCodeCoverage>
       </PropertyGroup>
       <Copy SourceFiles="$(CodeCoverageFullPath)"
             DestinationFiles="$(DestCodeCoverage)"
             SkipUnchangedFiles="true" />
  </Target>

  <Target Name="ProcessResults">
          <MSBuild Projects="$(MSBuildProjectFullPath)"
                   Targets="CopyCodeCoverage"
                   Properties="CodeCoverageFullPath=%(CoverageResultsXmlFiles.FullPath);RecursiveDir=%(CoverageResultsXmlFiles.RecursiveDir);DestinationDir=$(TestResultsDir)" />
  </Target>

@Sayed Ibrahim Hashimi对于属性函数和使用静态.Net方法有很好的post。因此,您可以实现所需的任何命名算法。