Visual Studio通过TFS恢复Nuget包

时间:2014-05-13 01:51:04

标签: c# visual-studio tfs msbuild nuget

今天我遇到了一个问题,由于我明显误解了Enable NuGet Package Restore在TFS中的源控制项目中是如何工作的,所以我花了一些时间才弄明白。所以首先让我解释一下我上周大概要解决的问题。

在我们的TFS服务器上,我为持续集成创建了一个构建定义。签入源代码时,构建服务器开始编译源,然后由于无法获取NuGet包而失败。我最初认为它是由于Enable NuGet Package Restore被禁用,所以我在解决方案级别打开它并重新提交我的代码。构建继续失败。如果没有对构建服务器的虚拟化实例的管理员访问权限,并且管理员最近被淹没了,我让我们继续前进并决定在几周内我的Sprint和他的Sprint变亮时我会处理它。目前不需要启动和运行构建服务器。然而,我确实删除了我在TFS中的分支的本地映射,删除了本地目录,重新映射了源代码并执行了新的get并重新编译了源代码而没有任何问题。 NuGet包下载得很好。

今天我们有一个新员工加入团队。他从TFS中提取了一份新副本,遇到了一些SlowCheetahfor transforming our WPF App Configs)NuGet失败。今天我们花了很多时间试图弄清楚为什么他没有正确地拉下文件。过了一会儿,我右键点击他的解决方案,发现Enable NuGet package Restore选项可用。即使在我的解决方案中,我启用了它,他的解决方案也没有设置它。我启用它并立即编译他的解决方案没有错误。

现在回到主要问题,如果我启用解决方案来恢复包,为什么我必须在另一个盒子上重新启用它?我假设通过确保在所有框的设置中启用Allow NuGet to download missing packages during build选项,Visual Studio将自动下载我的TFS源代码中缺少的NuGet包。这让我感到困惑,我很欣赏NuGet在TFS中存储的项目中使用包时应该如何工作(和恢复)。我们没有在TFS签到中包含任何软件包,因为我认为此功能应该自动适用于项目。

最后,我想知道这是否是我的构建服务器无法运行构建定义的原因。我收到NuGet错误,不知道如何告诉构建定义下载NuGet包。这是我需要做的事情,修改构建模板,在运行MSBuild之前添加一个序列来下载NuGet包吗?

提前致谢。

编辑1 我还想提一下,NuGet .targets文件也包含在TFS分支中。

1 个答案:

答案 0 :(得分:1)

这称为包恢复同意,对于IDE,您需要按用户执行此操作。有一种方法可以覆盖每台机器,但每个用户更容易。

对于服务器,您可以使用EnableNuGetPackageRestore环境变量,其值为' true'

了解更多信息:http://docs.nuget.org/docs/reference/package-restore