忽略构建后事件错误

时间:2018-09-18 11:47:58

标签: visual-studio visual-studio-2012 build-process projects-and-solutions post-build-event

我有一个C ++项目,该项目具有通过UI定义的构建后事件。该事件将启动可执行文件,并且其日志消息将打印到“输出”窗口。这些消息可能是错误消息,而VS会将其作为构建错误。但是,如果该命令报告错误,我不希望构建失败。

我做了一些研究,发现使用项目文件中的<Target>元素,我可以忽略这些错误。我在文件末尾定义了它。

  <Target Name="PostBuildEvent" Condition="'$(PostBuildEvent)'!=''" DependsOnTargets="$(PostBuildEventDependsOn)">
    <Exec WorkingDirectory="$(OutDir)" Command="$(PostBuildEvent)" IgnoreExitCode="true" />
  </Target>
</Project>

仅当在<PropertyGroup>元素中定义了构建后事件时,此方法才有效。

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <PostBuildEvent>Start the executable</PostBuildEvent>
  </PostBuildEvent>

但是,如果我通过UI设置命令,则该值将放在<ItemDefinitionGroup>部分中。

  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
      <PostBuildEvent>
        <Command>Start the executable</Command>
      </PostBuildEvent>
  </ItemDefinitionGroup>

如果我在<ItemDefinitionGroup>部分中定义了事件,则$(PostBuildEvent)将为空,并且不会调用任何内容。

<PropertyGroup>中定义属性的我的问题是它没有与UI同步。更改UI上的构建后事件,<ItemDefinitionGroup>定义将被更新。而不会调用更新后的命令。

  1. 是否可以访问<ItemDefinitionGroup>/<PostBuildEvent>/<Command>元素中的<Target>值?

  2. 如果不可能1.,如何通过UI更改<PropertyGroup>/<PostBuildEvent>

1 个答案:

答案 0 :(得分:0)

我设法找到解决问题的方法。使用以下格式的<Target>

  <Target Name="PostBuildEvent" DependsOnTargets="$(PostBuildEventDependsOn)">
    <Message Text="%(PostBuildEvent.Message)" Condition="'%(PostBuildEvent.Message)' != '' and '%(PostBuildEvent.Command)' != ''" Importance="High" />
    <Exec WorkingDirectory="$(OutDir)" Command="%(PostBuildEvent.Command)" Condition="'%(PostBuildEvent.Command)' != ''" IgnoreStandardErrorWarningFormat="True" />
  </Target>

使用%(...)可以达到<ItemDefinitionGroup>下定义的元素。这样,仍然可以通过UI编辑PostBuildEvent命令。

旁注:如果要使用自定义错误消息解析器,请在CustomErrorRegularExpression的{​​{1}}属性中定义一个正则表达式。

GoogleTests示例作为构建后事件运行:

Exec