2012-04-03 61 views
3

NuGet Package Restore似乎是结合NuGet与源代码控制(在我的情况下TFS),例如在this answer和在第一条评论this closed question。 NuGet Package Restore允许从源代码管理中获取并构建在另一个dev机器上的解决方案自动获取所需的NuGet包。NuGet包恢复*没有*改变解决方案中的每个项目导入NuGet.targets MsBuild任务

要将NuGet Package Restore添加到解决方案中,请右键单击该解决方案,然后选择启用NuGet Package Restore。那“添加了一个名为.nuget的解决方案文件夹,其中包含NuGet.exe和一个NuGet.targets的MsBuild文件,它还更改了解决方案中的每个项目以导入NuGet.targets的MsBuild任务。” (从http://docs.nuget.org/docs/Workflows/Using-NuGet-without-committing-packages引用)。但是我正在开发的解决方案中的一些项目是实用项目,在不同的解决方案之间以及不同的开发人员之间共享,他们做的是而不是需要由NuGet处理的引用。

如何启用NuGet软件包还原功能,但从NuGet构建任务设置中排除解决方案中的某些项目?

回答

4

目前,NuGet Package Restore有一些限制,不能限制在特定的项目中。 有一个现有的NuGet工作项目,将使其成为可能: #1812 - Enable Package Restore - Selective Projects

请评论/票上碰到的优先级,因为它目前积压。

注:在表面上,.csproj的文件似乎有一个属性,以支持关闭NuGet包还原,但由于另一个问题,它一直义无反顾的:NuGet command line forces package restore

+0

+1投票表决的建议。感谢您提供丰富的答案。 – dumbledad 2012-04-04 06:40:17

+0

Alexandre,我从该工作项目中注意到,一种方法是在解决方案上运行NuGet软件包还原,然后手动恢复您不想更改为以前版本的项目。这是一个很好的解决方法吗? – dumbledad 2012-04-04 08:45:04

+1

我相信由于我在回复中添加的注释,此时此刻不起作用。特别是[此问题](http://nuget.codeplex.com/workitem/1998),导致在每个项目中都会启用恢复,因为NuGet初始化时会调用EnablePackageRestore。 – 2012-04-04 16:04:43

1

您可以从运行脚本Prebuild第一个要建立的项目的步骤,它遍历所有packages.config文件并下载它们的内容。你需要调用

.nuget/nuget.exe install "....\packages.config" -o "packages" 
$(SolutionDir)

在您的解决方案的每packages.config

这实际上比标准解决方案效果更好,因为它也会下载未安装到项目中的解决方案级包。

在我buildserver我用这个(壳)片段:

find -iname packages.config -print0 | xargs -0 -ti mono --runtime=v4.0.30319 .nuget/nuget.exe install {} -o "packages" 
相关问题