2013-02-15 81 views
5

我正在使用TFS 2012自動構建包含多個Windows服務和兩個Web應用程序的解決方案。使用TFS團隊自定義拖放文件夾結構

我已經使用了指南,我發現here來定製構建過程模板,以便將windows服務放入我喜歡的文件夾結構中。具體做法是:

  1. \ dropserver \ droproot \ MyApp的\ BuildNumber \
    • \服務1
    • \客服2
    • \服務3
    • \服務4

這個偉大的工程,但不幸的是它不適用於網絡應用程序。如果我對這些策略使用相同的策略,則只需獲取每個Web應用的/ bin的內容,而不是完整的站點內容。

MSBuild通常使用Web應用程序目標來處理此問題,但由於某種原因,當您自定義構建時,這不起作用。我不再在構建輸出中獲取_PublishedWebSites文件夾。 (我猜這是因爲我清除了我們的MSBuild任務的OutDir屬性。)

有沒有人做過類似的事情,並獲得它與Web應用程序一起工作呢?

+2

你能在記事本中打開你的網站項目,並檢查以下是在那裏: 2013-02-18 13:45:21

回答

1

有了一些自定義的,這個方案最終爲我工作:

http://www.edsquared.com/2011/01/31/Customizable+Output+Directories+For+TFS+2010+Build.aspx

基本上沒有該鏈接推薦什麼,但還利用新的解決方案的配置(我稱之爲TeamBuild),而不是條件屬性定義。

我相信讓這一切工作的關鍵是將outputDirectory作爲MSBuild的TeamBuildOutDir參數傳遞。將此變量引用嵌入OutDir或OutputPath變量允許Team Build構建到正確的登臺位置,然後自動將文件從該位置複製到drop文件夾。

我打算稍微深入一點,擺脫整個_PublishedWebSites的東西,但那完全是在構建工作流程中完成的。

編輯: TFS 2013支持這本身具有簡單的構建配置選項:

enter image description here

+0

我也使用了EdSquared解決方案,效果很好。我強烈推薦它。註釋中有一些重要的細節(即OutDir屬性必須以尾部斜線結尾等)。 – efisher 2014-01-06 21:31:18

1

我想我可以提供幫助,它看起來像構建目標中發佈的網站文件夾不會創建,如果OutDir與OutputPath相同。

所以這不是完美的,但如果你添加以下到在第一組中的csproj文件,你會得到一切部署到「\ BIN \部署\」,包括_PublishedWebsites文件夾

<DeployOnBuild>True</DeployOnBuild> 
<OutDir>bin\deploy\</OutDir> 
+0

現在這給人打預防針......爲什麼我需要指定這兩次? – RMD 2013-02-18 19:01:48

+0

我將此添加到我的proj文件,但它似乎沒有任何區別。當我在VS中構建「TeamBuild」配置時,我將二進制輸出複製到我的目標目錄結構中,但其餘的web文件(html,js,css,圖像等)都沒有複製。 – RMD 2013-02-18 19:03:06

+0

對不起,我錯過了更多的東西,這實際上並不是要解決它。我做了一個我認爲會有所幫助的修改 - 儘管它並不完美。 – 2013-02-18 19:38:19

0

看看這個帖子也是這篇文章。 Team Build: Publish locally using MSDeploy 因爲你需要爲你的web項目中的所有文件,你需要觸發發佈過程,並通過調整該過程的目標,你可以有你的所有文件複製的,你需要他們。 我認爲他的答案中的選項(2)適合你。 我希望有所幫助。

0

正如我可以在你的參考link看到,它只會編譯和打包的二進制文件。它不會按照上述步驟部署網站。

如果您想在_PublishedWebSites文件夾下獲得.html,.css,.js等,您需要執行Web部署。這手動,我們可以通過點擊您的VS項目的右鍵菜單中的選項publish並選擇發佈方法文件系統做。

但是,由於您需要在構建中將其自動化並將其放入自定義放置文件夾中,因此您可能需要通過調用AspNetCompiler任務來操作MSBuild腳本。你可以在MSDN link更多相關信息。通過指定TargetPath當你調用這個目標就可以得到部署在相應的定製投遞文件夾您的Web文件。

快樂腳本。

相關問題