Msbuild скопировать и свести с уникальными именами файлов

2

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

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

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

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

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

Мне не нужны фактические имена, пока они уникальны.

Требуются ли какие-либо идеи, как пользовательская задача?

  • 0
    Можете ли вы объяснить, почему вы хотите сплющить структуру?
  • 0
    Эти файлы будут собраны Cruise Control и объединены в журнал сборки. Круиз-контроль не имеет большой поддержки подстановочных знаков. Например, в ccnet.config вы можете сделать это: TestResults \ *. Trx, но не этот TestResults \ ** \ *. Trx. Кроме того, мой сценарий сборки может генерировать уникальные имена файлов, но при этом придется переопределять цели из набора инструментов Silverlight, если изменения могут быть изолированы в сценарии сборки, это хороший выигрыш.
Показать ещё 1 комментарий
Теги:
mstest
msbuild
build-process

2 ответа

1
Лучший ответ

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

<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 script.

1

Да, потребуется специальная задача.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню