MSBuild如何检查目标是否是最新的?

ser*_*gtk 11 msbuild build-process

MSBuild发出以下消息以获取最新目标:

Skipping target "MyTarget" because all output files are up-to-date with respect to the input files.
Run Code Online (Sandbox Code Playgroud)

如何进行实际检查?

sll*_*sll 12

检查增量构建的流程:

目标元素既可以具有Inputs属性,也可以具有目标>期望作为输入的项目,以及Outputs属性,该属性指示它作为输出生成的项目MSBuild尝试在这些值之间找到1对1的映射.属性.如果存在1对1映射,MSBuild会将每个输入项的时间戳与其对应输出项的时间戳进行比较.将没有1对1映射的输出文件与所有输入文件进行比较.如果项目的输出文件与其输入文件或文件的年龄相同或更新,则该项目被视为最新.

如果所有输出项都是最新的,MSBuild将跳过目标.这种目标的增量构建可以显着提高构建速度.如果只有一些文件是最新的,MSBuild会执行目标但跳过最新的项目,从而使所有项目都是最新的.这称为部分增量构建.

  • 有谁知道时间戳检查的容忍度是多少?当我有多个项目(使用“ProjectReference”)时,它会在快速连续完成时多次重建参考。如果我在每个项目之间等待一分钟,那么他们会正确地看到它之前构建的依赖项是最新的并跳过它。 (2认同)

Tho*_*fer 7

MSBuild比较输入和输出文件时间戳以确定文件是否是最新的.有关详细信息,请参阅增量构建.