Team City 自定义 NuGet 包还原未发生

Posted

技术标签:

【中文标题】Team City 自定义 NuGet 包还原未发生【英文标题】:Team City Custom NuGet Package Restore Not Occurring 【发布时间】:2014-08-12 19:48:30 【问题描述】:

我目前正在将我们的构建从 Cruise Control 切换到 Team City,并且在尝试为我的多个项目中使用的组件恢复我的自定义 NuGet 包时遇到问题。该组件称为连接器基础。我在 Team City 中为 Connector Base 设置了一个构建,它成功创建了一个 NuGet 包并将其保存为工件,以便从我设置的 Team City NuGet 服务器进行访问。我已经进入了需要访问此依赖项的项目的解决方案,并且我已经使用我在 Team City 设置中提供的 URL 从 NuGet 包管理器安装了连接器基础。一切都很好,它按预期构建和运行。然后我将其提交给 SVN,并尝试使用 Team City 中的 NuGet 安装程序构建步骤对我的解决方案文件执行 NuGet 包还原。结果是它不构建或恢复任何包,因此稍后构建失败,因为它找不到连接器基础依赖项。我浏览了整个互联网,我能找到的最接近答案的地方是:http://nuget.codeplex.com/discussions/288024。但这是指包创建而不是恢复。

我包含我的日志以供参考:

Step 1/6: NuGet Package Restore (NuGet Installer)
[12:09:00]scan: Searching for nuget.config files
[12:09:00]Found packages folder: C:\TeamCity\buildAgent\work\e0174164dde3f938\Ingeo\Connector_County\NewConnectors\Acris\packages
[12:09:00]Failed to find repositories.config at C:\TeamCity\buildAgent\work\e0174164dde3f938\Ingeo\Connector_County\NewConnectors\Acris\packages\repositories.config
[12:09:00]Scanning projects in solution file: C:\TeamCity\buildAgent\work\e0174164dde3f938\Ingeo\Connector_County\NewConnectors\Acris\Acris.sln
[12:09:00]Found project C:\TeamCity\buildAgent\work\e0174164dde3f938\Ingeo\Connector_County\NewConnectors\Acris\Acris\Acris.csproj
[12:09:00]Found project C:\TeamCity\buildAgent\work\e0174164dde3f938\Ingeo\IngeoCommon\IngeoLogger\IngeoLogger\IngeoLogger.csproj
[12:09:00]Found project C:\TeamCity\buildAgent\work\e0174164dde3f938\Ingeo\Connector_County\Common_Components\DynamicConnectorTester\DynamicConnectorTester.csproj
[12:09:00]Found project C:\TeamCity\buildAgent\work\e0174164dde3f938\Ingeo\Connector_County\Common_Components\Interface\Interface.csproj
[12:09:00]Found project C:\TeamCity\buildAgent\work\e0174164dde3f938\Ingeo\Connector_County\NewConnectors\Acris\.nuget
[12:09:00]restore: Restoring NuGet packages for Ingeo\Connector_County\NewConnectors\Acris\Acris.sln
[12:09:00]NuGet command: C:\TeamCity\buildAgent\plugins\nuget-agent\bin\JetBrains.TeamCity.NuGetRunner.exe C:\TeamCity\buildAgent\tools\NuGet.CommandLine.DEFAULT.nupkg\tools\NuGet.exe restore C:\TeamCity\buildAgent\work\e0174164dde3f938\Ingeo\Connector_County\NewConnectors\Acris\Acris.sln -Source https://nuget.org/api/v2/ -Source http://localhost/guestAuth/app/nuget/v1/FeedService.svc/
[12:09:00]Starting: C:\TeamCity\buildAgent\temp\agentTmp\custom_script1470188724716953938.cmd
[12:09:00]in directory: C:\TeamCity\buildAgent\work\e0174164dde3f938\Ingeo\Connector_County\NewConnectors\Acris
[12:09:01]JetBrains TeamCity NuGet Runner 8.0.30168.9
[12:09:01]Registered additional extensions from paths: C:\TeamCity\buildAgent\plugins\nuget-agent\bin\plugins-2.8
[12:09:01]Starting NuGet.exe 2.8.50506.491 from C:\TeamCity\buildAgent\tools\NuGet.CommandLine.DEFAULT.nupkg\tools\NuGet.exe
[12:09:01]Process exited with code 0

执行包还原步骤后,我尝试构建解决方案,但失败并出现以下错误:

“此项目引用此计算机上缺少的 NuGet 包。启用 NuGet 包还原以下载它们”

一方面,我不想在每次构建时都在构建服务器上物理启用包恢复,当一个简单的包恢复应该执行诡计。有人对这个有经验么?我读到的一件事似乎表明这是因为我的 Connector Base NuGet 包还依赖于其他非自定义 NuGet 包。任何帮助是极大的赞赏。

更新

即使在我能够恢复我的包后,我仍然得到以下错误:

[Error] C:\TeamCity\buildAgent\work\e0174164dde3f938\Ingeo\Connector_County\NewConnectors\Acris\Acris\Acris.csproj(327, 5): This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is C:\TeamCity\buildAgent\work\e0174164dde3f938\Ingeo\Connector_County\NewConnectors\Acris\\.nuget\NuGet.targets.

【问题讨论】:

依赖于我的 NuGet 包的项目以前没有安装任何 NuGet 包。这意味着 packages.config 文件尚未添加到 SVN。一旦我提交了 packages.config,它就能够恢复这些包。但是,我仍然在上面的 UPDATE 中收到错误。 【参考方案1】:

编辑构建配置并添加一个名为 EnableNuGetPackageRestore 类型环境变量的新参数,其值为 true。无论哪个代理运行构建,这将允许包恢复。

在 TeamCity 上启用包还原后,在本地加载您的解决方案并右键单击解决方案资源管理器中的解决方案并选择“启用 NuGet 包还原”。这将更改解决方案中的每个项目以导入 NuGet.targets MsBuild 任务,您需要将此更改提交到源代码管理。

【讨论】:

添加此环境变量参数并将其设置为true后,我仍然遇到同样的错误。 我已经编辑了我的答案以添加您需要执行的另一个步骤。之后它应该可以工作了。 这是我之前已经在做的事情。我们必须在我们所有的解决方案上“启用 NuGet 包恢复”,然后它们才能从 SVN 中拉出。它仍然有同样的问题。

以上是关于Team City 自定义 NuGet 包还原未发生的主要内容,如果未能解决你的问题,请参考以下文章

VS 中NuGet 尝试还原程序包时出错"*"已拥有为"**"定义的依赖项

NuGet自动更新特定包

NuGet 包还原 + NuGet 源设置

从解决方案中删除 nuget 包还原

1分钟解决VS每次运行都显示“正在还原nuget程序包”问题

VS一直停留在“正在还原nuget程序包”