Msbuild скопировать и свести с уникальными именами файлов - PullRequest
2 голосов
/ 17 января 2010

Я пытаюсь скопировать несколько файлов из глубокого дерева исходников, которые имеют с тем же именем файла . Например, TestResults.trx. Я хочу скопировать их в один каталог (т. Е. Выровнять) . Проблема в том, что они просто перезаписывают друг друга, и я просто получаю в каталоге один TestResults.trx.

<ItemGroup>
  <SilverlightTestResults Include=".\**\*.trx" Exclude=".\TestResults\*" />
</ItemGroup>
<Copy SourceFiles="@(SilverlightTestResults)" DestinationFolder=".\TestResults">

Я думал, что смогу сделать преобразование, используя некоторые хорошо известные метаданные , но, похоже, нет ничего уникального для этого (результаты теста, которые я пытаюсь скопировать вживую в таких каталогах, как this:. \ SomeProject \ bin \ debug \ TestResults.trx).

Копирование в каталог, подобный этому, было бы идеальным:

.\TestResults\TestResults1.trx
.\TestResults\TestResults2.trx
.\TestResults\TestResults3.trx

Меня не волнуют настоящие имена, пока они уникальны.

Любые идеи, похоже, что пользовательская задача требуется?

Ответы [ 2 ]

1 голос
/ 17 января 2010

Я не могу предоставить решение, которое просто использует msbuild - вы можете использовать msbuildtasks использовать задачу для увеличения счетчика.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
     <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
    <PropertyGroup>
    <FileCounter>0</FileCounter>
</PropertyGroup>
    <ItemGroup>
        <MySourceFiles SilverlightTestResults Include=".\**\*.trx" Exclude=".\TestResults\*"/>
    </ItemGroup>
<Target Name="CopyFiles">
    <Math.Add Numbers="$(FileCounter);1">
        <Output TaskParameter="FileCounter" PropertyName="FileCounter" />
    </Math.Add>
    <Copy
        SourceFiles="@(MySourceFiles)"
        DestinationFiles="@(MySourceFiles->'.\TestResults\%(Filename)_$(FileCounter)%(Extension)')"
    />
</Target>

Однако вы могли бы справиться с пользовательской задачей или, возможно, выполнить скрипт powershell.

1 голос
/ 17 января 2010

Да, пользовательская задача потребуется.

Вы можете посмотреть, какие функциональные возможности предлагает задача Move из проекта задачи сообщества ( ссылка здесь ), но если она не выполняет то, что вам нужно, то она с открытым исходным кодом, так что будет тривиально проверить источник и изменить его в соответствии с вашими потребностями.

...