2011-09-13 51 views
2

我正在研究如何使用NuGet在我的組織內分發開發人員框架和工具。我有服務器設置,並能夠生成包並將它們添加到消費項目。我現在正在考慮將其擴展到更真實的情況。爲NuGet發佈配置類庫

就我而言,我將擁有一個我們分發給組織中所有開發團隊的框架。這個框架有一個「核心」類庫,然後是一組特定的技術庫,例如Acme.Web,Acme.Silverlight等。這些庫中的每一個都引用「核心」程序集。

我已經將這些程序集中的每個程序包打包到它自己的NuGet程序包中,包括在其他程序包中設置爲依賴關係的「core」。這是因爲開發人員可能選擇在創建類庫時僅引用「核心」,但在創建Web應用時也需要這些類型等。

另一個想法是,我可以發佈新版本的「核心」需要所有其他軟件包中的更新。或者我可以嗎?

想象一下,我有項目A的情況下,添加NuGet軟件包C的依賴NuGet軟件包B,然後包C被更新。是否有可能在不重建,重新包裝和重新發布軟件包B的情況下分發此更新?如果是這樣,我需要採取哪些措施來確保沒有版本問題?

回答

7

這聽起來像你問的是,給出下面的依賴關係圖的問題:

- >意味着取決於

B 1.0 -> C 1.0 

如果剛好有一個更新C,可以說時1.1 ,您想知道您是否可以將該更新發布到C並讓消費者更新它,而不會破壞B.

我打算假設您在這裏打包程序集。如果是這種情況,那麼你絕對可以做到這一點。 NuGet做了一些事情來幫助爲具有強名稱的程序集做這項工作(即它增加了必要的綁定重定向)。你只需要確保你使用正確的版本(我強烈建議你閱讀關於這個主題的David Ebbo的posts)。

給你一個關於如何工作的基本理解。說你是在一個團隊中的3,你,開發人員1和2

  1. 發佈程序包b 1.0和C 1.0爲貴公司的飼料
  2. 開發1裝B 1.0,並得到Ç1.0
  3. 你對C做了一個小錯誤修正,並將其稱爲C 1.0.1(因爲它沒有中斷)。你不更新B(這意味着它說它對C 1.0而不是C 1.0.1有依賴性)。
  4. 開發1更新C至1.0.1,並繼續工作
  5. 開發人員2裝B 1.0,並得到Ç1.0.1(的NuGet的依賴解析行爲)。

在上述情況下,你在C 1.0改爲版本到C 1.0.1並沒有重新發布B.現在

,如果你做出了巨大的重大更改並撞着版本到C 2.0,那麼也許你想考慮重新打包B並增加版本號,並使B的版本依賴於C 2。0:

B 2.0 -> C 2.0 
+0

你釘了它,這正是我期望完成的。優秀! – SonOfPirate