2011-12-09 26 views
13

因此,我想使用NuGet來管理我爲我的團隊和我正在開發的特定項目所使用的各種項目。到目前爲止,我已將我的.js庫文件放在我的Web解決方案(ASP.NET MVC 2)的/ Scripts目錄中並引用它們。當然,這是手動的,並且在升級期間很煩人。如何正確使用NuGet進行團隊開發?

現在我使用的是NuGet,我意識到NuGet的整個目標是使這個相當無痛。另外,似乎我不應該檢查我的軟件包到我的倉庫中(我不需要再管理我的外部庫)。但是,當我從NuGet中獲取jQuery時,它將其特定文件放置在我的項目的/ Scripts目錄中。

在哪裏我感到困惑 - 如果有什麼,我應該檢查源代碼控制在這一點上?我仍然檢查/ Scripts目錄嗎?另外,如果有其他人正在從事這個項目並從源代碼控制中檢查出解決方案,那麼這些包是否會自動下載(假設解決方案帶有一個有效的packages.config)?

我只是想在我們開始全職使用NuGet之前澄清幾點。

回答

13

NuGet vs VCS有兩種情況:要檢入或不檢入,這就是問題所在。 兩者在我看來都是有效的,但是當使用TFS作爲VCS時,我肯定會去no-checkin policy for NuGet packages

即使在使用NuGet軟件包的no-checkin策略時,我仍會檢查那些NuGet軟件包對我的項目所做的內容更改。 \Scripts文件夾將全部簽入(不是選擇性的,不會被忽略)。

對我來說,軟件包的禁止簽入策略是指:不檢查\ Packages文件夾(cloak it,忽略它),除了\Packages\repositories.config文件。因此,您實際上不會提交任何NuGet軟件包,並且在使用NuGetPowerTools中的Enable-PackageRestore時(這將在NuGet v1中內置)。6),任何檢查代碼和構建的機器都將在預構建步驟中獲取所有需要的NuGet依賴關係。 只要在您的解決方案中啓用了Enable-PackageRestore並指向正確的NuGet存儲庫(本地,內部,外部),則對於本地開發計算機都適用於構建服務器。

如果你考慮一下,當安裝一個只添加對某些二進制文件引用的NuGet包時,你已經在一個沒有簽入的場景中做了同樣的事情:你不會提交\Packages文件夾的子文件夾,你會提交項目更改(添加的參考)。

我會說,是一致的(適用於任何類型的軟件包),無論是僅包含二進制文件,僅包含內容還是混合。 Do not commit the packages themselves,確實對您的來源進行了更改。 (如果只是爲了避免查找內容變化的麻煩)

+0

謝謝,「檢查項目變更」的事情是失蹤的重要部分! – theDmi

1

NuGet,就像Nexus一樣,是工件存儲庫(工件是任何類型的可交付物,包括潛在的大二進制文件)。

的副作用是你不是在VCS(版本控制系統)元素存儲:

  • 不會從VCS功能(分支,合併)受益
  • 會顯著增加在VCS庫的大小(無增量或弱增量存儲)
  • 將是非常難以從VCS庫中刪除(主要目的是保持歷史)

的目標是給你聲明你需要什麼(並讓NuGet爲你取)而不是它自己存儲它。
因此,您可以將版本/Scripts作爲佔位符,但您不再需要對現在自動獲取的任何內容進行版本化。

+0

那麼自動構建呢?如果腳本不在源代碼控制中,那麼它們如何打包到構建輸出中以啓用部署? –

+0

我剛剛在特定的解決方案中首次使用了NuGet。我得到了jQuery,然後編輯了.csproj文件以查看所做的更改。這些腳本只包含在內容文件中。如果這些文件沒有存儲在源代碼管理中,我就沒有看到這些文件會在自動構建過程中奇蹟般地出現。 –

+0

@JohnSaunders:它們應該作爲構建命令的一部分自動顯示,它將讀取配置文件,調用Nuget獲取正確的構件版本,並在它們不在本地時下載它們:這意味着,不需要包含那些(庫,exe,dll,...)在VCS中。請參閱http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html – VonC