【问题标题】:Nuget Automatic Restore - Specifying custom repositories for TFS BuildNuget 自动还原 - 为 TFS 构建指定自定义存储库
【发布时间】:2014-08-29 07:45:38
【问题描述】:

我正在尝试迁移到 nuget 的新自动包还原。虽然它在我自己的机器上运行良好(包已恢复),但在构建服务器上作为 TFS 构建执行的构建不会构建,抱怨他们找不到各种 dll(应该作为恢复的一部分下载)。

我在我的解决方案文件夹中创建了一个 nuget.config,如下所示:

http://blog.davidebbo.com/2014/01/the-right-way-to-restore-nuget-packages.html

我也试过把这个 nuget.config 文件放在 TFS 中的 nuget.exe 文件旁边,希望它会被使用,但无济于事。

这里的nuget参考:

http://docs.nuget.org/docs/reference/nuget-config-file

表示应该选择我的解决方案文件夹中的 nuget.config。但似乎不是。

我已经走到了尽头。根据 nuget 的说法,包还原功能是专门设计的,因此不需要签入包。但是,关于如何让 TFS 实际还原包的信息很少,而且我发现的内容不起作用。

如有任何帮助,我们将不胜感激。

我的 nuget.config 如下所示:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
  <packageSources>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
    <add key="ads" value="<address to local repository>" />
  </packageSources>
</configuration>

【问题讨论】:

  • Visual Studio 中内置了新的自动包还原,它不使用 MSBuild。据推测,TFS 不会使用 Visual Studio 来构建解决方案。我想看看您是否可以在 TFS 中设置一个运行“nuget restore YourSolution.sln”的预构建步骤。假设您不想使用基于 MSBuild 的包还原。
  • 你是对的——这就是问题所在。 “预构建”步骤只是需要创建的自定义构建的一部分。如果有一种方法可以将预构建步骤设置为构建定义的一部分,那也会很有用,但看不到。
  • 我在链接 [link]docs.nuget.org/consume/package-restore/team-build 上遇到了问题。它恢复所有包,但甚至不尝试构建解决方案。此外,msbuild 的输出显示它运行了 "C:\Builds\1\Services\MyProject\src\tools\NuGet\NuGet.exe" restore "" 为什么是空字符串?为什么不是它找到的 .sln 文件夹?它确实将包还原到 src 下的包文件夹。此外,如果我尝试手动构建解决方案,现在里面的所有项目都失败了,说找不到包。知道我做错了什么吗?

标签: visual-studio tfs nuget build-process nuget-package-restore


【解决方案1】:

事实证明,答案是我实际上没有问的问题的答案:

“TFS 怎么知道如何调用 nuget?”

坐下来思考了一会儿(正如@Matt Ward 正确指出的那样),我突然想到 TFS 构建甚至无法知道 nuget 是否涉及,因为新的“自动”包还原删除了需要它成为构建本身的一部分。

这个问题实际上已经在这里提出:

How does TFS know about nuget?

虽然接受的答案实际上不是正确的。向下滚动到 probackpacker 的答案,基本上是这样的:

“如果您使用自动包还原,则必须有一个在构建解决方案之前调用它的构建过程”

这实际上在 nuget 上有很好的记录:

http://docs.nuget.org/docs/reference/package-restore-with-team-build

但是,我忽略了它,因为 a) 自动包还原的全部意义在于摆脱基于 MSBuild 的过程(尽管我现在明白为什么会有所不同),并且 b) 它似乎比我需要的要复杂.它不是。也就是说,诸如“如果您将自动包还原与 TFS Team Build 一起使用,您必须创建一个 MSBuild 项目才能调用包还原”之类的澄清声明会很有帮助。一旦您了解正在发生的事情,这很明显 - 当您不了解时会感到困惑。但我们生活和学习。

【讨论】:

    【解决方案2】:

    根据 Visual Studio 的版本,只需右键单击解决方案并选择启用 NuGet 包还原即可。这将创建一个 Nuget 文件夹,其中包含 NuGet.exe、一个 NuGet.Targets 文件和 NuGet.config。

    如果有本地 NuGet 源,您可以使用本地 NuGet 源更新目标文件。

    要在本地测试,删除包文件夹的内容,然后重新构建解决方案,这将从 NuGet 下载文件,您的解决方案应该可以正确构建。签入 NuGet 文件夹和文件到源代码管理,您的包不应添加到源代码管理。

    您的 TFS 构建现在应该能够恢复包

    现在,如果您是这样设置的,但它仍然无法在 TFS 上运行,请使用构建帐户登录构建服务器并在本地加载解决方案,确保包还原在构建时作为构建帐户工作机器,您可能有防火墙/代理问题,构建服务器/构建帐户无法访问 Nuget.org 网站

    【讨论】:

    • 谢谢,但那是旧的基于 MSBuild 的包还原。正如我在我的问题中提到的,我正在尝试迁移到 nuget 的新自动包还原,它不需要任何这些。
    • 很公平,但我仍然会从构建服务器检查它是否已经在您的机器上运行
    猜你喜欢
    • 2015-11-27
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 2018-10-18
    • 2017-08-16
    • 2017-05-10
    相关资源
    最近更新 更多