2014-02-14 106 views
6

我在啓用NuGet程序包恢復的TeamCity中構建項目。TeamCity NuGet安裝程序步驟問題

我有兩個構建步驟:

  • 的NuGet安裝
  • 的MSBuild

其中一個項目有log4net的包從安裝了官方的飼料。 (但沒有得到掛在哪個包)

我的問題是,當TeamCity的運行的第一步,它與該消息的NuGet安裝程序步驟失敗: 找不到版本「2.0。包'log4net'的3'。

所以盡我所能找到解決任何錯誤後,我嘗試:

  1. 禁用的NuGet安裝步驟
  2. 運行我的生成 - 這顯然會失敗,因爲它沒有包 (見下文)
  3. 啓用的NuGet安裝步驟
  4. 重新運行建立

[編輯]關於第3步,正如John H.所指出的,理想情況下,MSBuild能夠重建軟件包,因此我不需要一個NuGet安裝程序步驟。當我嘗試構建沒有nuget安裝程序步驟的解決方案時出現錯誤與我安裝的OctoPack軟件包有關:

OctoPack無法運行,因爲NuGet軟件包在生成運行之前已恢復,目標文件在構建開始時不可用。請重新構建項目以在構建中包含這些包。您可能還需要確保您的構建服務器不會每個版本

然後它成功之前刪除包。爲什麼?

有沒有人對我的問題有所瞭解?

一些更多的背景:

我認爲這事做與章魚部署包。我在teamcity服務器上安裝了octopus deploy插件,並在MSBuild步驟中勾選了Run OctoPack複選框。

我試圖卸載octopack軟件包並重新安裝沒有任何成功。

難道是MSBuild步驟結合章魚插件的NuGet包恢復導致我的問題?

[部分分辨率]我仍然不確定爲什麼我在log4net-package上出現錯誤。作爲自動構建的第一步,我正在運行NuGet安裝程序,由於構建的性質,最終證明這是正確的事情。

我承認在包更新時我不會(總是)讀取「新增內容」。從2.0升級Octopack時。26到3.0.19其中一個變化是您不再需要檢入.octopack文件夾。所以,我真的可以理解爲什麼構建找不到目標文件,當它在被檢查

現在我:

  • 升級到Octopack 3
  • 移除了.octopack文件夾版本控制
  • (再次)啓用了TeamCity的

中的NuGet安裝步驟和構建運行良好。

感謝您的幫助!現在我是一個受過良好教育的人:)

[刪除]無關信息

+1

「NuGet安裝程序」步驟的目的是否顯式恢復MSBuild步驟的軟件包?正確配置,MSBuild步驟應該能夠在沒有任何幫助的情況下恢復軟件包。 MSBuild步驟是否記錄任何NuGet錯誤? –

+0

嗨,約翰,謝謝你指出。當我禁用包恢復步驟並運行失敗的構建時,錯誤實際上是關於另一個包OctoPack。 「OctoPack無法運行,因爲NuGet包在構建運行之前已經恢復,並且目標文件在構建開始時不可用,請重新構建項目以將這些包包含在構建中,也可能需要確保構建服務器不會在每次構建之前刪除包「。我看看那個.. – HaraldV

+1

我在這裏使用ContinuiCI,它爲每個構建創建一個源文件夾的新副本。如果我正在閱讀這個權利,那意味着每個版本的軟件包都會被恢復? –

回答

3

的解決方案是運行的NuGet恢復之前,還原由MSBuild的運行步驟。

如果MSBuild步驟需要恢復包,MSBuild步驟將暫停。在MSBuild運行之前進行恢復意味着它不必進行恢復。該解決方案在this .NET Framework Blog article中討論。

Octopus Deploy團隊的回覆是here

相同的問題會導致TFS失敗 - 請參閱RinoTom的回答here。我使用Continua CI並添加了一個命令行步驟,以在MSBuild步驟之前運行Nuget恢復。