如何使用MSBuild递归地仅复制修改过的文件或新文件?

如何使用MSBuild递归地仅复制修改过的文件或新文件?,msbuild,Msbuild,我需要一些使用MSBuild将文件复制到两个目录的帮助 首先我发现了after.xyz.sln.targets。这将确保无论实际生成与否,复制文件任务都将运行 我想用它只将新的或修改过的文件复制到两个目标目录。所以我还需要一些比较代码。我能想到的步骤 比较dir1和dir2,并在dir1中找到任何新的或修改过的文件 递归地将这些文件复制到dir2 然后递归地将精确的文件集复制到dir3 TIA。您需要使用任务的参数SkipUnchangedFiles。例如: <Project xmlns=

我需要一些使用MSBuild将文件复制到两个目录的帮助

首先我发现了after.xyz.sln.targets。这将确保无论实际生成与否,复制文件任务都将运行

我想用它只将新的或修改过的文件复制到两个目标目录。所以我还需要一些比较代码。我能想到的步骤

  • 比较dir1和dir2,并在dir1中找到任何新的或修改过的文件
  • 递归地将这些文件复制到dir2
  • 然后递归地将精确的文件集复制到dir3

  • TIA。

    您需要使用任务的参数
    SkipUnchangedFiles
    。例如:

    <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)')"
                SkipUnchangedFiles="true"
            />
        </Target>
    
    </Project>
    
    
    
    谢谢您提供的信息。我当然不知道滑雪板。有没有办法将c:\MyDestinationTree指定为来自ItemGroup?我尝试了@(MyTarget),但它实际上创建了类似项目名称的文件夹。@sdog,我不确定我是否正确理解了您在评论中的第二个问题。请就此提出一个新问题,并更详细地描述您的场景。