2014-01-29 19 views
0

我希望這是已經回答的問題的一個愚蠢的副本。如何在每個CI構建之後直接從NuGet提供新的DLL?

我有一個asp.net網站,依賴於一些其他項目(DLL複製到bin)。現在,我想要的是每次更新任何這些項目時,我會在我的網站/ bin中獲取最新的dll。我不希望我的CI服務器檢入更新的dll。

我已經爲我的項目提供了一個私人的NuGet feed,並且只是希望它在每次成功的CI構建之後提供最新的dll。現在,我的問題是

  1. 有沒有辦法直接提供dll,而不創建nupkg?並可能從構建輸出文件夾中選擇它們? (由於某些原因,將包作爲所有dll的後期構建任務一天創建數百次並不方便)如果可能的話,太棒了!

  2. 如果不是,我們是否可以避免每次增加dll的版本號,還是讓nuget更新到新的dll?比如根據最新發布日期或其他內容進行更新? (有大量的dll和很多依賴項)

  3. 有沒有辦法在不構建解決方案的情況下采用最新的dll?是的,我可以做一個nuget更新命令,但有沒有其他方法?

有人建議鏡像我目前的代碼庫,並使用類似MyGet或ProGet的東西。出於多種原因,目前尚不可行。

回答

1

在任何NuGet依賴項之後觸發Visual Studio構建可能不是您真正需要的 - 這是CI的一項工作。但是,您可以在packages.config文件中設置版本範圍,以使VS(通過nuget)在可用時提取較新的NuGet包。

要回答你的具體問題:

  1. 你爲什麼要到服務器「隨機」寬鬆的DLL其原產地,你不能確定的? NuGet提供了一種機制來跟蹤你自己的代碼所依賴的代碼的來源,這使得更容易跟蹤錯誤:)如果你依賴於包含每天變化數百次的DLL的NuGet包,那麼你應該建立這些DLL直接與您的應用程序。

  2. 請參閱#1 - 如果您經常重新構建NuGet包,那麼您的包裝邊界可能會出錯。考慮如何真正獨立你的軟件包,看看把一些DLL集中在一起,還是分離出多個分開的應用程序之間共享的代碼是合理的。如果你創建了一個NuGet包的新版本,那麼你應該增加版本號 - 這是語義版本化的一個基本前提,如果你不遵循這種模式,你會陷入混亂。

  3. 要打倒最新的NuGet依賴,nuget update是你的朋友:)

使用MyGet或ProGet 可能是解決方案的一部分,但它不是直接關係到你上面提到的模式。

+0

我想要做的實際事情是,每當我的CI服務器成功運行時,它都會在我的提要中推送新的nuget包。所以,我不想觸發基於依賴關係的VS構建,但是希望在每個CI構建之後通過nuget創建新的dll(s)。 現在可以通過在構建文件中添加任務來創建新包。但是,正如你所提到的那樣,每天創造一百次新套餐並不是一個好的選擇。所以,我正在尋找一些東西,以便 –

+0

(1)dll可以直接提供,而無需創建包。在這裏,我非常確定它的起源,因爲它們只是從我的(其他)項目創建的。目的 - 開發人員每次構建解決方案時都會獲得最新的依賴關係。 (2)你說的是真的,我只是尋找一個開發環境的旁路,在那裏我們可以根據生成日期或其他東西來更新軟件包,而不是每次增加版本(嚴格開發) –

+1

核心原則之一CI和特別是持續交付是任何構建*都可以產生可以推向生產的構件。這意味着您需要所有工件和構建的可追蹤性。 如果您發現您每天都會多次構建依賴項(例如庫),那麼很可能應該將此代碼帶入開發人員使用的主要解決方案中。 你可以嘗試NuGet的'PreRelease'功能,但我仍然認爲這不是你的問題所在。 M –

相關問題