2017-06-20 142 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跳過' –