我正在获取文件列表*.config并将它们复制到目录列表中.这些目录是相对于C:\branches\具有名称的路径,然后是name.UnitTest.
所以副本看起来像没有重构/批处理:
<Target Name="CopyClientConfigs">
<ItemGroup>
<ClientConfigDestinations Include="$(LocalSourcePath)\Module1\Module1.UnitTest\;
$(LocalSourcePath)\Module2\Module2.UnitTest\;
$(LocalSourcePath)\CommonControls\Module3\Module3.UnitTest\;
$(LocalSourcePath)\Administration\Module4\Module4.UnitTest\;
$(LocalSourcePath)\IndividualControls\Configuration\Module5\Module5.UnitTest\" />
<ClientConfigs
Include="$(ClientConfigPath)\*.config"
Exclude="$(ClientConfigPath)\P*.config" >
</ClientConfigs>
</ItemGroup>
<Copy
SourceFiles="@(ClientConfigs)"
DestinationFolder="%(ClientConfigDestinations.FullPath)"
/>
Run Code Online (Sandbox Code Playgroud)
我想要的是能够使用这个ItemGroup
<ItemGroup>
<MyModules Include="$(LocalSourcePath)\Module1;
$(LocalSourcePath)\Module2;
$(LocalSourcePath)\CommonControls\Module3;
$(LocalSourcePath)\Administration\Module4;
$(LocalSourcePath)\IndividualControls\Configuration\Module5"
/>
Run Code Online (Sandbox Code Playgroud)
所以任务就像
Copy
SourceFiles="@(ClientConfigs)"
DestinationFolder="%(ClientConfigDestinations.FullPath)\*.UnitTest\"
/>
Run Code Online (Sandbox Code Playgroud)
或更好
Copy
SourceFiles="@(ClientConfigs)"
DestinationFolder="%(ClientConfigDestinations.FullPath)\%(ClientConfigDestinations.NameOnly).UnitTest\"
/>
Run Code Online (Sandbox Code Playgroud)
如何重构或正确批量操作?
如果我正确地阅读了您的问题,我认为您正在尝试进行跨产品复制:将一个ItemGroup中的所有项目复制到另一个组中的所有文件夹.
我实际上有一个整洁的目标用于执行此操作,因为我讨厌TeamBuild将所有二进制文件放入单个文件夹的方式 - 我希望项目能够指定它们的输出是"捆绑"并且输出也将被复制到一个或多个位置.
为此,我有两个项目组:BundleFiles(我要复制的文件集)和BundleFolders,它们是我要复制到的文件夹集.
<ItemGroup>
<BundleOutDir Include="FirstFolder;SecondFolder" />
<BundleFiles Include="file1;file2" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
然后我的目标包含两个这样的任务:
<ItemGroup>
<FilesByDirsCrossProduct Include="@(BundleFiles)">
<BundleOutDir>%(BundleOutDir.FullPath)</BundleOutDir>
</FilesByDirsCrossProduct>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
这将创建一个超级项目组,其中包含文件夹的文件交叉产品.
副本非常简单:
<Copy SourceFiles="@(FilesByDirsCrossProduct)"
DestinationFiles="@(FilesByDirsCrossProduct -> '%(BundleOutDir)\%(Filename)%(Extension)' ) "
SkipUnchangedFiles="true" />
Run Code Online (Sandbox Code Playgroud)
然后,这会将文件复制到其元数据中指定的文件夹中.
我的目标实际上更聪明一点,因为我可以声明捆绑包将转到子文件夹和/或我可以在复制期间通过元数据重命名文件,但这是一个不同的故事
| 归档时间: |
|
| 查看次数: |
1655 次 |
| 最近记录: |