[英]Run an MSBuild target only if project is actually built
我有一个MSBuild文件,用于构建* / .sln文件(构建所有存在的.sln文件)。
构建使用Build目标,因此如果没有对输入文件进行任何更改,则不应再次构建任何项目。
我想只在项目实际上再次构建时才执行一些自定义目标。
如何才能做到这一点?
无论编译/构建是否实际发生,都始终调用AfterBuild和AfterCompile 。
基本上你需要和PostBuildEvent
一样的行为,所以我查看了Microsoft.Common.Targets
是如何做到的(这个文件总能提供一个很好的洞察如何使用msbuild)。 这是解决方案:
<PropertyGroup>
<RunPostBuildEvent>OnOutputUpdated</RunPostBuildEvent>
</PropertyGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="RunWhenBuild" AfterTargets="CoreBuild"
Condition="'$(_AssemblyTimestampBeforeCompile)'!='$(_AssemblyTimestampAfterCompile)'">
<Message Importance="high" Text="RunWhenBuild!!"/>
</Target>
这就是:当存在一个名为RunPostBuildEvent
的属性,其值为OnOutputUpdated
, CoreBuild
目标的依赖关系将最终记录构建之前和之后的输出文件的时间戳。 如果它们相等,则输出不会构建。 所以剩下的就是让你的目标在CoreBuild
之后CoreBuild
并检查这些时间戳。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.