c# - Visual Studio 通过 TFS 还原 Nuget 包

标签 c# visual-studio tfs msbuild nuget

今天我遇到了一个问题,由于我对 Enable NuGet Package Restore 的明显误解,我花了一些时间才弄明白。在 TFS 的源代码控制项目中工作。因此,首先让我解释一下我在过去一周左右的时间里解决的问题。

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

然而,今天我们有一位新员工加入了团队。他从 TFS 中提取了一份新副本并遇到了一些 SlowCheetah ( for transforming our WPF App Configs ) NuGet 失败。我们今天花了很多时间试图找出他没有正确下载文件的原因。过了一会儿,我右键单击他的解决方案,发现 Enable NuGet package Restore 选项可用。即使在我的解决方案中,我已经启用了它,但他的解决方案没有设置它。我启用了它,并立即正确编译了他的解决方案。

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

最后,我想知道这是否就是我的构建服务器无法运行我的构建定义的原因。我收到 NuGet 错误并且不确定如何告诉构建定义下载 NuGet 包。这是我需要通过修改构建模板、添加一个序列来在运行 MSBuild 之前下载 NuGet 包或其他东西来完成的吗?

提前致谢。

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

最佳答案

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

对于服务器,您可以使用值为“true”的 EnableNuGetPackageRestore 环境变量

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

关于c# - Visual Studio 通过 TFS 还原 Nuget 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23621620/

相关文章:

c# - 输出类型为类库的项目无法直接启动

c# - Visual Studio C++ 和 C# 的键盘快捷键

emacs - 如果我有一个文件和一个 diff,而不是同一文件的两个版本,我可以使用 ediff 吗?

c# - 用于 C# 的免费条码 128 库

c# - 如何在 OpenXML Word 文档中嵌入字体文件

c# - 使用 Entity Framework 防止没有唯一约束的重复插入

visual-studio - Visual Studio 扩展包 - 自定义文件类型 - 编辑器和图标

visual-studio - .Net Core 1.1.0 NuGet程序包无法在Visual Studio Mac中安装

c# - 通过 TFS 生成 SQL 管理工作室解决方案

visual-studio-2012 - 团队基础服务器 : Why is changeset history shared among separate projects?