当我去了解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