问题描述
我的文件夹结构如下
Module
-->Asia - 1.0.0.12
------>Deployment
------>Install.exe
------>version.xml
-->Africa - 1.0.3.4
------>Deployment
------>Install.exe
------>version.xml
-->Europe - 2.0.1.2
------>Deployment
------>Install.exe
------>version.xml
我想将每个区域下的“ deployment”文件夹(和子文件夹)复制到我的输出目录中。区域号将更改,因此我无法在Include语句中对其进行硬编码。我要复制到亚洲区域的命令是
<ItemGroup>
<GetFiles Include="$(MSBuildProjectDirectory)\Module\Asia*\Deployment\**\*">
<Destination>D:\Region\Asia</Destination>
</GetFiles >
</ItemGroup>
<copy
SourceFiles="%(GetFiles.Identity)"
DestinationFolder="%(GetFiles.Destination)\%(RecursiveDir)"
/>
我没有将Deployment文件夹及其子目录复制到Destination下,而是将文件夹结构设为
D:\Region\Asia\Asia - 1.0.0.12\Deployment
我想要的是
D:\Region\Asia\Deployment
这可以实现吗?谢谢
解决方法
MSBuild任务,以使用野生型复制特定文件夹的内容 路径中的卡片
如果在msbuild中使用通配符并执行复制任务,则MSBuild将始终从使用通配符的第一个地址复制路径。
根据您的情况,由于您仅在Asia*
下使用通配符,因此它将Asia - 1.0.0.12\Deployment
的文件夹结构保留在D:\Region\Asia
下。
作为一个建议,要获得所需的内容,您需要明确指出 Asia 文件夹的名称,即使它非常复杂,也需要一一指定。
像这样使用:
<Target Name="xxx" BeforeTargets="Build">
<ItemGroup>
<GetFiles Include="$(MSBuildProjectDirectory)\Module\Asia - 1.0.0.12\Deployment\**\*">
<Destination>D:\Region\Asia</Destination>
</GetFiles>
</ItemGroup>
<Copy SourceFiles="%(GetFiles.Identity)"
DestinationFolder="%(GetFiles.Destination)\Deployment\%(RecursiveDir)"/>
</Target>