MSBuild任务通过在路径中使用通配符来复制特定文件夹的内容

问题描述

我的文件夹结构如下

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>