我正在尝试让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任务)只有在重建至少一个程序集时才执行此目标?
答案 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>