2017-06-20 87 views
0

我创建了一个自定义任务,在构建操作后执行。构建过程后始终执行自定义MSBuild任务

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

问题:是否可以执行任务,如果构建操作引发的,但没有执行,因为在该项目没有变化/没有必要再建?

换句话说:即使项目不是重新构建,我也希望在构建过程结束时始终执行任务。

UPDATE:使用AfterTargets="Build" 或设置属性 <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck> 没有帮助。

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

+0

您是如何第二次触发构建过程的?只需在Visual Studio中单击构建? –

+0

@ Leo-MSFT是的,确切地说。 –

回答

1

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

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

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

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

更新:

  1. 定义属性项目中的文件:
  2. 添加自定义MSBuild任务 不知道为什么这种方法不是对你的项目工作,让我的答案更详细的原因与一些消息的信息。
  3. 构建项目,检查输出(日志文件的详细程度为正常)。
  4. 重新构建项目,再次检查输出。
+0

MSBuild cmd是没有选项。定义财产并没有帮助。 –

+0

@ChristianSt。,谢谢你的回复。我在我的macine上测试它,它工作正常。不知道为什么它不适合你的项目。您可以尝试创建一个新的空白项目并按照我的步骤验证此问题,检查它是否正常工作。如果没有,请分享我们的项目类型和其他信息,或与我们分享样品给我们,以便我们能够重现此问题。 –

+0

Aaaahhh对不起...设置属性是解决方案。我的错是我没有直接在项目文件中设置属性。相反,我将其设置在多个项目之间共享的项目文件(Import ....)中)。它正在工作。谢谢:-) –

0

如果我使用AfterTargets="Build"代替AfterBuild,该消息被每次我生成解决方案(.NET Core控制台应用程序与.NET标准类别Libary)时写入到输出窗口。

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

无法重现。我只得到(和以前一样)输出'Build:0成功,0失败,1最新,0跳过' –