2011-06-08 62 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

相关问题