如果实际发生新编译,我怎样才能运行msbuild目标?

时间:2017-04-26 18:14:22

标签: msbuild

我正在尝试让MSBuild生成一个文本文件,其中的版本号代表创建构建的时间。

现在,在我的MSBuild任务中,我有以下内容:

  <Target Name="WriteBuildDate" AfterTargets="Compile">
    <WriteLinesToFile File="buildversion.txt" Lines="$([System.DateTime]::UtcNow.Year).$([System.DateTime]::UtcNow.Month).$([System.DateTime]::UtcNow.Day).$([System.Math]::Floor($([System.DateTime]::UtcNow.Subtract($([System.DateTime]::UtcNow.Date)).TotalSeconds)))" Overwrite="true" Encoding="Unicode" />
  </Target>

这样可行,但即使未重建所有程序集也会执行。这意味着如果我为多个服务器使用VS发布功能,每个服务器的版本号都会略有不同,即使这些版本都是相同的。

是否有任何方法(没有自定义的msbuild任务)只有在重建至少一个程序集时才执行此目标?

1 个答案:

答案 0 :(得分:0)

感谢@ stijn的评论/链接,我能够通过以下方式实现这一目标:

  <PropertyGroup>
    <RunPostBuildEvent>OnOutputUpdated</RunPostBuildEvent>
  </PropertyGroup>

  <Target Name="WriteBuildDate" AfterTargets="CoreBuild" Condition="'$(_AssemblyTimestampBeforeCompile)'!='$(_AssemblyTimestampAfterCompile)'">
    <WriteLinesToFile File="buildversion.txt" Lines="$([System.DateTime]::UtcNow.Year).$([System.DateTime]::UtcNow.Month).$([System.DateTime]::UtcNow.Day).$([System.Math]::Floor($([System.DateTime]::UtcNow.Subtract($([System.DateTime]::UtcNow.Date)).TotalSeconds)))" Overwrite="true" Encoding="Unicode" />
  </Target>