2011-07-19 184 views
8

將nuget包添加到項目時,會將程序集放在解決方案級別的/ packages文件夾中。爲什麼NuGet將軟件包放在「解決方案級別」?

我知道,有很多方法可以改變這一點,但我不知道爲什麼是這樣的默認位置,因爲它似乎這些原因非常無益的:

1)如果你有一個項目,是的一部分多個解決方案,/包文件夾不一定是你的項目預期的地方。

2)您需要將其手動檢入到其他團隊成員的源代碼管理中,這比將其作爲需要它的項目的一部分要方便得多。 3)如果您將項目移動到文件系統的其他位置,或移動到不具有完整代碼庫的其他計算機上,則無法找到它所期望的/ packages文件夾。

如果NuGet只是在項目中使用了一個/ packages文件夾,而不是解決方案,似乎所有這些都將被解決。這似乎是一個更合乎邏輯的地方放置項目依賴的軟件包。

所以......我假設在解決方案層面有一些很好的理由,我希望有人能夠啓發我。

回答

4

你應該有這樣的閱讀,解釋如何使用的NuGet不commiting包源控制,以及副作用解決點1和你的問題3:http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html

+0

嗯,這可能有幫助。 Nuget會自動下載舊版本的軟件包嗎?即如果我從包含某個nuget提供的程序集v1.1的版本控制中獲取一些源代碼,並且該程序集的當前版本是3.4,會發生什麼情況? – chrismay

2

我認爲這是節省磁盤空間。如果你有一個包含50個項目的大型解決方案,並且你在每一個項目中使用了一個包,那麼你最終會得到該包的50個副本,二進制文件和全部。而保持解決方案的水平在這方面要高效得多。

就源代碼控制而言,您不應該將實際的包文件夾放在那裏。只需添加packages.config文件,然後執行David Ebbo在mathieu提到的博客文章中建議的內容,或者創建一個簡單的批處理文件以基於它可以找到的packages.config文件下載所有包。

創建自己的公司nuget feed沒有太大的努力,所以你可以保留你的私人包在那裏。

+0

創建oru自己的nuget feed有助於解決這個問題嗎?聽起來就像那篇博客文章中那樣,使用私人和公共Nuget Feed的人都無法使用所描述的技術。我的另一個擔心是我覺得我們需要在源代碼管理*某處*,b/c中使用這些程序集,如果我們需要對4年前的代碼執行維護,那麼我們需要獲得與該項目一起部署的程序集版本。所以如果他們必須進行源代碼管理,爲什麼不把它們包含在你的項目中呢? – chrismay

+0

如果你不能從代碼再現組件,那麼你需要考慮是否會導致你的問題。它爲我工作的公司提供服務,所以我們將自動化的構建,包裝和發佈與使用semver一起,使我們能夠重新創建任何版本的任何程序集,並且將常見的東西向前移動,而不用擔心會破壞一切取決於它。我很抱歉,如果我的答案的最後一部分引起了攻擊,沒有人打算,我只是指出,如果你覺得你需要它,設置並不困難。 –

+0

如果是爲了節省磁盤空間,它是令人難以置信的短視。 COM和DLL地獄人? –

相關問題