當我去了解Chris B是否爲此創建了一個NuGet問題時,找到一個。編輯:他做了,看到他的評論如下。但我沒有找到我用來解決這個問題的NuGet的半記錄功能:Allow specifying the folder where packages are installed
讓我打破了這個問題到2個問題:
- 得到的NuGet以允許多個解決方案,使用相同的包位置
- 得到的NuGet包,自動將來自源控件獲取當你包括具有的NuGet包的項目
問題1: 默認的NuGet包店s放在解決方案文件夾的包文件夾中。要更改位置,創建解決方案的根文件夾中的文件nuget.config具有以下內容:
<settings>
<repositoryPath>..\..\..\Utilities\Library\nuget.packages</repositoryPath>
</settings>
<repositoryPath>
是相對於您的解決方案;所以很明顯,無論你想要什麼。讓每個解決方案擁有它自己的相對路徑,以指向相同的包文件夾。
就NuGet的流程而言,從那一刻起,repositories.config中的路徑與包含repositories.config的文件夾相關,而不是解決方案,所以現在所有項目/軟件包都獨立於解決方案位置進行管理。
這允許多個解決方案在源代碼控制中使用相同的包,如果這些解決方案使用相同的項目(使用NuGet包),則無論哪個解決方案更新包,這些解決方案/項目都將保持同步。
問題1完全解決了。
問題2:
讓我從2個角度解決這個問題。這適用於Visual Studio和TFS--我將離開SVN供其他人解決。
首先:如果你有你的驅動器上沒有源代碼,並做了解決(不是一個項目)的東西,我寧願讓這個你該解決方案需要建立的一切。不應該有任何缺失的引用去手動抓取。我們可以通過將軟件包文件添加爲解決方案項目來做到這一點。是的,在每個解決方案。有一點工作,是的,但是當它完成時,軟件包文件將從源代碼控制中自動獲取/更新。第二:在新的解決方案中,當您包含一個現有的具有NuGet包的源控制項目時,您必須手動從源代碼控制中提取包並將它們添加爲解決方案項目。至少其他任何人在未來獲得解決方案將自動獲取他們成功構建所需的一切。至少在VS/TFS方面,這只是它的方式,AFAIK。如果projB依賴於projA,並且您將projB添加到新解決方案中,則VS/TFS不會自動從TFS獲取projA。你必須手動完成。那麼對於dll引用(如NuGet包)也是如此。
總結我的解決方案:
- 只有一個源代碼控制包的副本,所有的解決方案
- 任何解決方案可以更新包和其他所有的解決方案將保持同步*
*一旦一個解決方案將軟件包更新爲新路徑或文件名稱,它們將顯示爲缺少對其他解決方案的引用,您將不得不手動清理該文件。但至少你知道這些包在源代碼控制中的位置「(與RandomSolution \ packages位置相反)。」
感謝 - 作爲一種解決方法,我只是將依賴關係更改爲NuGet包以及內部服務器上,內置的依賴性解析然後使其「工作」。雖然不理想。我會跟蹤問題跟蹤器。 – 2011-06-19 15:59:05