Как скопировать несколько файлов в один каталог без перезаписи в MSBuild - PullRequest
0 голосов
/ 08 марта 2011

У меня есть несколько файлов CodeCoverage.xml в отдельных каталогах, и я хочу скопировать их в один каталог с новыми именами, чтобы они не перезаписывались.

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

Кто-нибудь имеет представление о том, как скопировать эти файлы в $ (TestResultsDir) без их перезаписи?

Есть ли способ сгенерировать случайное число, которое можно предварительно добавить к имени файла, чтобы оно было уникальным?

1 Ответ

0 голосов
/ 08 марта 2011

Вы можете сделать это с помощью функций 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>

@ Саид Ибрагим Хашими имеет превосходную публикацию о функциях свойств и использовании статических методов .Net.Таким образом, вы можете реализовать любой алгоритм именования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...