如何将多个文件复制到同一目录而不在MSBuild中重写

如何将多个文件复制到同一目录而不在MSBuild中重写,msbuild,copy,unique,Msbuild,Copy,Unique,我在不同的目录中有多个CodeCoverage.xml文件,我想用新名称将它们复制到一个目录中,这样它们就不会被覆盖 <ItemGroup> <CoverageResultsXmlFiles Include="$(TestResultsDir)\**\CodeCoverage.xml" /> </ItemGroup> 有人知道如何将这些文件复制到$(TestResultsDir)而不被覆盖吗 是否有一种方法可以生成一个随机数,该随机数可以预先

我在不同的目录中有多个CodeCoverage.xml文件,我想用新名称将它们复制到一个目录中,这样它们就不会被覆盖

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

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


是否有一种方法可以生成一个随机数,该随机数可以预先挂起到文件名上,以便它们是唯一的?

您可以使用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>

$(RecursiveDir.Replace(“,”))
$(DirIdentity.Replace(“\”,“\”))
$([System.IO.Path]::GetRandomFileName())
$(DestinationDir)\$(DirIdentity)\u$(UniqueIdentity)\u CodeCoverage.xml
@Sayed Ibrahim Hashimi在属性函数和使用静态.Net方法方面非常优秀。因此,您可以实现任何您想要的命名算法