Nuget自动还原 - 为TFS Build指定自定义存储库

时间:2014-07-08 14:14:10

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

我正在尝试迁移到nuget的新自动包恢复。虽然它在我自己的机器上工作正常(包被恢复),但是在构建服务器上作为TFS Build执行的构建不会构建,抱怨他们找不到各种dll(应该已经作为恢复的一部分下载)。 / p>

我在我的解决方案文件夹中创建了一个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的说法,Package Restore功能是专门设计的,因此不需要检入包。但是,关于如何让TFS实际恢复包的信息很少,而且我发现的功能不起作用。 / p>

感谢任何帮助。

我的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>

2 个答案:

答案 0 :(得分:3)

正如经常发现的那样,答案是我实际上没有问过的问题的答案:

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

坐下来思考这一段时间后(正如@Matt Ward正确指出的那样)我发现TFS Build无法知道nuget是否参与,因为新的“自动”包恢复删除了需要它成为构建本身的一部分。

这个问题实际上已在此处提出:

How does TFS know about nuget?

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

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

这实际上在nuget中有详细记载:

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

然而,我忽略了它,因为a)自动包恢复的整个要点是远离基于MSBuild的过程(虽然我现在明白为什么这是不同的),和b)它似乎比我需要的更复杂。不是。也就是说,一个澄清的声明,如“如果你正在使用自动包恢复与TFS团队建设,你必须创建一个MSBuild项目,以便调用包恢复”将有所帮助。一旦你理解了正在发生的事情就很明显 - 当你不了解时会感到困惑。但我们生活和学习。

答案 1 :(得分:-1)

取决于visual studio的版本,只需右键单击解决方案并选择Enable NuGet Package restore即可。这将创建一个Nuget文件夹,其中包含NuGet.exe,NuGet.Targets文件和NuGet.config。

您可以使用本地NuGet Feed更新目标文件(如果有)。

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

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

NuGet Restore

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