MSBuild:复制文件(如果已更改),然后执行操作(仅当文件已更新时)

MSBuild:复制文件(如果已更改),然后执行操作(仅当文件已更新时),msbuild,Msbuild,在MSBuild中,我可以使用Copy任务将文件从一个位置复制到另一个位置 我还可以使用SkipUnchangedFiles属性指定如果文件未更改,则不应复制这些文件 在复制一个或多个文件的情况下,是否有标准模式来预测后续操作 例如: 复制任何更新的部署脚本 当且仅当一个或多个脚本已更改时,按正确顺序执行运行所有部署脚本的批处理文件 更复杂的是,我正在使用CreateItem任务动态生成输入文件列表: <Project xmlns="http://schemas.microsoft.com

在MSBuild中,我可以使用
Copy
任务将文件从一个位置复制到另一个位置

我还可以使用
SkipUnchangedFiles
属性指定如果文件未更改,则不应复制这些文件

在复制一个或多个文件的情况下,是否有标准模式来预测后续操作

例如:

  • 复制任何更新的部署脚本
  • 当且仅当一个或多个脚本已更改时,按正确顺序执行运行所有部署脚本的批处理文件
  • 更复杂的是,我正在使用
    CreateItem
    任务动态生成输入文件列表:

    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="CopyAndRun">
      <Target Name="CopyAndRun">
        <CreateItem Include="In\**\*Test*.txt">
          <Output TaskParameter="Include" ItemName="SourceFiles"/>
        </CreateItem>
        <Copy SourceFiles="%(SourceFiles.Identity)" DestinationFolder="Out\%(RecursiveDir)" SkipUnchangedFiles="true" />
        <!-- Only want to execute this if updated files were copied -->
        <Message Text="Running..." />
      </Target>
    </Project>
    
    
    
    您可以使用MSBuild提供的现成工具来实现这一点

    赛义德·易卜拉欣·哈希米


    我的书:

    好主意!但是,我使用CreateItem动态生成要复制的文件列表。在这种情况下,是否仍然可以使用增量建筑功能?(我在问题中添加了一个示例项目。)是的,这仍然是可能的。其实很简单。创建另一个目标,即SourceFileItems,并使CopyAndRun依赖于此。然后,当MSBuild到达CopyAndRun时,它将首先执行依赖目标,然后在实际执行CopyAndRun时开始批处理。如果你仍然有问题,我可以给你一个具体的例子。Ibrahim Hashimim说,顺便说一句,如果您使用的是MSBuild 3.5,那么您可以使用普通的ItemGroup语法在目标内声明项目,而不是使用CreateItem任务。