首先说明,这是msbuild故意的,而且无法通过配置选项更改,作用看名字就知道了,就是总是创建失败构建信息,如果是处女座为了好看一定要改,如下:
备份并修改文件
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets
具体就是将
<WriteLinesToFile Overwrite="true" File="$(LastBuildState)" Lines="$(ProjectStateLine);$(ProjectEvaluationFingerprint)"/>
<Touch AlwaysCreate="true" Files="$(LastBuildUnsuccessful)"/>
</Target>
<!-- *******************************************************************************************
FinalizeBuildStatus target
******************************************************************************************* -->
<Target Name="FinalizeBuildStatus">
<Delete Files="$(LastBuildUnsuccessful)" Condition="Exists($(LastBuildUnsuccessful))"/>
<Touch Files="$(LastBuildState)" Condition="Exists($(LastBuildState))"/>
</Target>
改为
<WriteLinesToFile Overwrite="true" File="$(LastBuildState)" Lines="$(ProjectStateLine);$(ProjectEvaluationFingerprint)"/>
<!--<Touch AlwaysCreate="true" Files="$(LastBuildUnsuccessful)"/>-->
</Target>
<!-- *******************************************************************************************
FinalizeBuildStatus target
******************************************************************************************* -->
<Target Name="FinalizeBuildStatus">
<!--<Delete Files="$(LastBuildUnsuccessful)" Condition="Exists($(LastBuildUnsuccessful))"/>
<Touch Files="$(LastBuildState)" Condition="Exists($(LastBuildState))"/>-->
</Target>
之后就都不见了,这些相关代码应该可以在某些特定情况下解决特定问题,注释掉以后就可能在那时产生问题,到时候再改回来。
有些地方说“<Touch AlwaysCreate="true" Files="$(LastBuildUnsuccessful)"/>use "false" to replace it.”
这是不对的,因为很多时候会产生编译错误。
Touch就是“摸”一下文件,什么都不做,仅仅更新文件的最近修改时间;“AlwaysCreate”就是说摸的时候假若文件不存在就新建一个。