关于{ 正在创建 .unsuccessfulbuild 因为已指定“AlwaysCreate” }的解决方案

来源:互联网 发布:linux 获取系统时区 编辑:程序博客网 时间:2024/04/25 13:44

首先说明,这是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”就是说摸的时候假若文件不存在就新建一个。

1 0