2010-09-03 52 views
1

我們有它包含以下部分(簡體)一個MsBuild.proj文件:如何確保msbuild文件中的目標只被調用一次?

<Target Name="WEB" DependsOnTargets="CleanResults;UpdateAssemblyInfo;Services;Business"> 

    <!-- Other build and release stuff -->  
      <MSBuild Projects="$(CreateInstallValuesScriptProjectFile)" Properties="DatabaseStructureLocation=$(DatabaseDirectory)\Sandbox\002.Structure" /> 
     </Target> 

基本上,InstallValuesScript產生在我們databasedirectory .sql文件,將在更新我們的應用程序的版本數據庫。相當簡單。

構建被稱爲例如:

MSBuild msbuild.proj /m /t:WEB /p:Configuration=Release;DoRelease=true;DoSandBox=false;DoWix=false /fileLoggerParameters:LogFile=msbuild.log;Verbosity=normal;Encoding=UTF-8 

然而,我們所看到的是,InstallValues部分被多次調用,並因此該文件被創建了幾次,並在不同的位置......很顯然,當構建編譯兩三次而不是一次時,這很煩人,但並不是真正的關鍵(只是變慢了一點),但是對於這個Installvalues文件,我們真的不希望它的多個實例。

那麼,一個目標可以被多次調用?也許是由編譯一個依賴程序集引起的?有關這種奇怪的現象的一些亮點將受到高度讚賞。

回答

2

一般情況下,除非 編輯 :即使你<CallTask>,的MSBuild不會構建一個給定的頂層調用中運行一個目標多次,甚至如果你有依賴重複(順序事項,但一旦完成,就完成了)。

您是否可能對以某種複雜方式鏈接的項目文件進行調用嵌套?

,但事實是在日誌[你似乎如此刻苦創造!]

+0

是的,很可能問題會調用的嵌套。我認爲可能會更好地從頭開始重做構建。但是,多謝我指向日誌,請務必首先檢查明顯的解決方案:) – Sam 2010-10-01 07:30:40

+0

即使使用'',MSBuild也不會多次調用目標。達到此目的的唯一方法是使用''任務指定不同的屬性。 – 2011-05-08 20:47:13

+1

@Dmitry Lobanov:更正。 @Sam:對錯誤信息抱歉 – 2011-05-12 19:41:02

相關問題