2009-09-11 51 views
2

我在自己的構建中有一個自定義目標(一組副本任務),我需要調用幾次才能在不同的地方進行更改。然而,這隻在第一次被調用時運行,之後TFS將跳過所述目標。自定義目標在TFS構建中第一次運行後被跳過

的過程如下:

<!-- Copy some files to another location --> 
<CallTarget Targets="CopyFiles"></CallTarget> 

... 

<!-- Copy the above files to yet another location --> 
<CallTarget Targets="CopyFiles"></CallTarget> 

在生成日誌,可以看出,目標「CopyFiles」跳過它被稱爲第二次:

Target "CopyLicenseManagerFiles" skipped. Previously built successfully.

這是爲什麼發生了什麼?有沒有辦法強制目標(或我寫的任何自定義目標)多次運行?

回答

3

它應該每個MSBuild實例,每個參數集調用一次。在某些情況下,團隊構建會分離MSBuild的單獨實例(例如,如果您提供多個解決方案配置)。但是這可能對你沒有幫助。

更適用於您的場景,如果您使用一組不同的參數調用MSBuild,它將重新運行一項任務。如果您正在複製兩組不同的文件,這聽起來就像您要查找的功能。

<MSBuild Project=".\CommonStuff.targets" Targets="CopyFiles" Properties="Location=1" /> 
<!-- .... --> 
<MSBuild Project=".\CommonStuff.targets" Targets="CopyFiles" Properties="Location=2" /> 

另一種解決方案是將功能重構爲任務而不是目標。雖然仍然存在着陳述性與程序性的怪癖,但任務更接近於你所認爲的來自更熟悉的語言的「功能」。

3

這是設計。目標不應被視爲「方法」。 MSBuild更具說明性。因此,它會跟蹤已執行的目標,並有目的地跳過已完成的目標。