始终在构建过程后执行自定义MSBuild任务

时间:2017-06-20 08:11:22

标签: visual-studio visual-studio-2015 msbuild msbuild-task

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

<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

2 个答案:

答案 0 :(得分:4)

  

如果构建操作被触发但是没有执行,是否可以执行任务,因为项目没有变化/不需要再次构建?

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

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

注意:此方法似乎是Visual Studio绕过MSBuild的正常最新检查并使用某种更快的自定义检查,但具有打破自定义构建目标的副作用。

更新: 不确定这个方法对你的项目不起作用的原因,让我更详细地回答:

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

答案 1 :(得分:0)

如果我使用AfterTargets="Build"而不是AfterBuild,则每次构建解决方案时都会将消息写入“输出”窗口(带有.NET标准类库的.NET Core Console应用程序)。

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