2010-12-22 68 views
6

我正在用自動TFS 2010年中構建的解決方案我有一個以上的web應用程序都放在同一個根目錄下 - 例如:如何告訴MSBuild將多個Web項目發佈到一個目錄中?

RootDir中 - >

WebApplicationProject1.csproj 
    WebApplicationProject2.csproj 
    ... 

當我運行自動構建,我設置MSBuild的以下參數:

/p:DeployOnBuild = TRUE; DeployTarget = PipelinePreDeployCopyAllFilesToOneFolder; _PackageTempDir = 「\計算機\構建\發佈時間」/ p:SkipExtraFilesOnServer =真

但是,MSBuild不會保留此文件夾中的現有內容,並且每個項目都會刪除此文件夾中的內容。最後一個項目是贏家。

我可以讓MSBuild不刪除此文件夾中的內容,只替換現有文件嗎?

感謝有關此事的任何信息。

回答

0

您可以將它們全部構建爲單獨的文件夾,然後將所有結果複製到最終文件夾中。如果文件具有相同的名稱,它可能會被搞砸,但如果您可以直接將它們全部構建到一個文件夾中,那將是如此。

+0

感謝您的答覆。但我不想那樣。這意味着在TFS中有獨立的構建。我想要一個構建配置來構建幾個在同一個目錄中共存的Web項目。發佈時,我希望它們也可以在一個目錄中發佈。 – 2010-12-29 22:17:38

+0

你可以編寫一個批處理腳本或者其他可以運行所有獨立版本的東西,然後複製它們。 – zsalzbank 2010-12-29 22:19:15

1

您不必創建多個構建配置。 只需定義一個包含兩個項目的解決方案,爲該解決方案創建一個構建定義,並添加一個AfterDropBuild目標,該目標將PublishedWebservices輸出子文件夾的所有內容複製到一個公共文件夾。

0

這似乎只是微軟想要的方式。我在VS2008中發現了同樣的事情。構建該項目會消滅整個文件夾,包括.svn。

我的解決方案是創建一個生成後事件,將文件從每個位置複製到一個公共文件夾中。這並不理想,但它確實沒有發現任何重大掛斷。

1

你需要告訴的MSBuild你的多重目標

嘗試

<Target Name="Build" DependsOnTargets="T1, T2"> 
</Target> 

的MSBuild允許你定義一個默認的目標,它允許您將目標中定義依賴。如果沒有定義默認值,那麼它將運行找到的第一個默認值。使用DefaultTargets,你可以調用多個:

<Project DefaultTargets="T1;T2"> 

一個目標應完成一個明確定義的步驟。例如,Clean目標將刪除清理項目所需的所有必需文件和文件夾。編譯會編譯所有的DLL等。

你的目標通常應申報自己的依賴:

<Target Name="CI" DependsOnTargets="T1, T2"> 
</Target> 

否則,你的目標應該包含所有你想要運行的各個步驟:

<Target Name="XX"> 
    <CallTarget Targets="T1"/> 
    <CallTarget Targets="T2"/> 
</Target> 

,如果你仍然面臨的困惑,請這link

相關問題