gpt4 book ai didi

c# - Msbuild 使用唯一文件名复制和展平

转载 作者:太空宇宙 更新时间:2023-11-03 11:51:18 25 4
gpt4 key购买 nike

我正在尝试从具有相同文件名 的深层源代码树中复制多个 文件。例如 TestResults.trx。我想将它们复制到一个单个目录(即展平)。问题是它们只是相互覆盖,我最终在目录中得到一个 TestResults.trx。

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

我想我可以使用一些 well known metadata 进行转换但似乎没有什么独特之处可以做到这一点(我试图复制的测试结果存在于这样的目录中:.\SomeProject\bin\debug\TestResults.trx)。

像这样复制到这样的目录是最理想的:

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

我不关心实际名称,只要它们是唯一的即可。

任何想法,看起来需要自定义任务?

最佳答案

我无法提供仅使用 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 脚本做得更好。

关于c# - Msbuild 使用唯一文件名复制和展平,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2082291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com