始终在生成过程之后执行自定义 MSBuild 任务



我创建了一个在构建操作后执行的自定义任务。

<Target Name="AfterBuild" />
<Target Name="MyTarget"
        AfterTargets="AfterBuild">
  <MyTask ... />
</Target>

问题:如果构建操作已触发,但没有执行,因为项目中没有更改/无需再次构建,是否可以执行任务?

换句话说:我希望始终在构建过程结束时执行任务,即使项目没有再次构建。

更新:使用AfterTargets="Build"或设置属性<DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>无济于事。

第二次触发构建过程后,我只得到输出:Build: 0 succeeded, 0 failed, 1 up-to-date, 0 skipped

如果构建操作已触发但未执行,是否可以执行任务,因为项目中没有更改/无需再次构建?

如果我理解正确,您可以在项目文件中定义此属性:

<PropertyGroup> 
  <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck> 
</PropertyGroup>

注意: 此方法似乎绕过了 MSBuild 的常规最新检查,并使用了某种更快的自定义检查,但具有破坏自定义生成目标的副作用。

更新:不确定此方法不适用于您的项目的原因,让我更详细地回答:

  1. 在项目文件中定义属性:
  2. 添加包含一些消息信息的自定义 MSBuild 任务。
  3. 生成项目,检查输出(日志文件详细程度为正常(。
  4. 再次
  5. 生成项目,再次检查输出。

如果我使用 AfterTargets="Build" 而不是 AfterBuild ,则每次生成解决方案时,消息都会写入"输出"窗口(具有 .NET 标准类库的 .NET Core 控制台应用(。

  <Target Name="MyAfterBuild" AfterTargets="Build">
    <Message Importance="High" Text="Hello World!" />
  </Target>

最新更新