能否更简单/优雅地编写此MSBuild目标?

能否更简单/优雅地编写此MSBuild目标?,msbuild,Msbuild,我的MSBuild知识有些生疏。我今天写了这个工作目标,但我相信它可以缩小 有谁能看清楚如何更简单地表达这一点吗 <Target Name="FolderX"> <PropertyGroup> <Dest>$(StandardModelDir)\FolderX</Dest> </PropertyGroup> <ItemGroup> <File Include

我的MSBuild知识有些生疏。我今天写了这个工作目标,但我相信它可以缩小

有谁能看清楚如何更简单地表达这一点吗

 <Target Name="FolderX">

    <PropertyGroup>
        <Dest>$(StandardModelDir)\FolderX</Dest>
    </PropertyGroup>

    <ItemGroup>
        <File Include="$(CustDir)\File1.sql">
            <Dest>$(Dest)\Views--Alpha</Dest>
        </File>
        <File Include="$(CustDir)\File2.sql">
            <Dest>$(Dest)\Views--Alpha</Dest>
        </File>
        <File Include="$(CustDir)\File3.sql">
            <Dest>$(Dest)\Views--Bravo</Dest>
        </File>
        <File Include="$(CustDir)\File4.sql">
            <Dest>$(Dest)\Views--Bravo</Dest>
        </File>
    </ItemGroup>

    <Copy
       SourceFiles="@(File)"
       DestinationFolder="%(File.Dest)\.."
    />
</Target>

$(StandardModelDir)\FolderX
$(Dest)\Views--Alpha
$(Dest)\Views--Alpha
$(Dest)\Views--好极了
$(Dest)\Views--好极了

请注意,文件不是递归存储在源目录中,因此我不能使用
%(RecursiveDir)

您可以使用掩码。在您的情况下,可以使用文件扩展名掩码*.sql

MSDN中的示例:


谢谢,但前提是源文件与目标文件递归地位于源代码树中的同一嵌套中。在本例中,情况并非如此(请参见编辑)。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <ItemGroup>
        <MySourceFiles Include="c:\MySourceTree\**\*.*"/>
    </ItemGroup>

    <Target Name="CopyFiles">
        <Copy
            SourceFiles="@(MySourceFiles)"
            DestinationFiles="@(MySourceFiles->'c:\MyDestinationTree\%(RecursiveDir)%(Filename)%(Extension)')"
        />
    </Target>

</Project>