2011-06-08 65 views
17

我在弄清楚處理這種情況的最佳方法是什麼。Nu-Get&針對多個解決方案所引用的項目的項目級依賴問題

比方說,我有一個被多個不同的非相關解決方案引用的庫,我們稱之爲WebServiceInterface.dll。這個庫依賴於JSON.NET。

的NuGet

之前的JSON.NET二進制文件通過SVN在WebServiceInterface項目外部引用。其他依賴WebServiceInterface的解決方案引用了項目(也作爲SVN外部),因此牽扯到項目和依賴關係。

用的NuGet

我還沒有想出如何強制JSON.NET參考WebServiceInterface項目下儲存(而不是在RandomSolution \包的位置)。我找到了參考@ nu-get到項目級別和解決方案級別的pacakges,但似乎無法找到如何通過nu-get添加依賴項時指定此項。

這裏的目標是,當有人簽出WebServiceInterface並將其添加到它構建的新解決方案時(而不是在指向最後解決方案簽入的軟件包目錄的JSON.NET的引用中斷) 。

回答

4

的包總是存儲在解決方案級別,因此,如果您安裝一個包到多個項目,他們來自同一個地方來了。我不相信你可以配置它,以便每個項目都有自己的包文件夾。

我不確定有一種很好的方法來做你想做的事。你可能會有一個build step的項目提取包,但我不知道這會適合你多好。

我建議張貼在NuGet Issue Tracker以進行討論。工作人員似乎非常活躍,所以它可能是他們可以在未來版本中添加支持的東西:-)

+0

感謝 - 作爲一種解決方法,我只是將依賴關係更改爲NuGet包以及內部服務器上,內置的依賴性解析然後使其「工作」。雖然不理想。我會跟蹤問題跟蹤器。 – 2011-06-19 15:59:05

23

當我去了解Chris B是否爲此創建了一個NuGet問題時,找到一個。編輯:他做了,看到他的評論如下。但我沒有找到我用來解決這個問題的NuGet的半記錄功能:Allow specifying the folder where packages are installed

讓我打破了這個問題到2個問題:

  1. 得到的NuGet以允許多個解決方案,使用相同的包位置
  2. 得到的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位置相反)。」

+1

這裏是我把原來的評論 - http://nuget.codeplex.com/discussions/261930 - 我現在要給新的軟件包還原功能 - http://docs.nuget.org/docs/workflows /使用nuget-without-committing-packages一槍,因爲它看起來會最終給我一個可行的系統 – 2012-01-07 10:41:28

+0

Package Restore看起來很有希望。請讓我們知道它是如何爲你工作的! – minnow 2012-01-07 14:09:26

+0

如果您閱讀ecousa最近關於以下兩個問題的評論:http://nuget.codeplex.com/workitem/215?PendingVoteId=215,http://nuget.codeplex.com/workitem/1990 - 這可能是一個解決問題2 – 2012-06-15 09:07:19

相關問題