Я пытаюсь скопировать несколько файлов из глубокого исходного дерева, у которого одно и то же имя файла. Например, 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
Мне не нужны фактические имена, пока они уникальны.
Требуются ли какие-либо идеи, как пользовательская задача?
Я не могу предоставить решение, которое просто использует 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.
Да, потребуется специальная задача.
Вы можете посмотреть, какие функции выполняет задача Move
из проекта задачи сообщества (здесь) предлагает, но если это не так "делайте то, что хотите, то это с открытым исходным кодом, поэтому будет тривиально проверять источник и изменять его в соответствии с вашими потребностями.