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