如何告诉TeamCity的NuGet安装程序构建步骤同时使用NuGet.org和TeamCity提供的软件包源?

18

我在使用NuGet Installer构建步骤时遇到了问题。

我们既使用官方的NuGet.org包,也使用托管在TeamCity NuGet服务器上的自己的包。如果我将“包源”留空,则可以找到来自NuGet.org的包,但是一旦我指定%teamcity.nuget.feed.server%作为包源,就无法找到来自NuGet.org的包。

我尝试设置“包源”以包括两者,但官方的nuget.org包仍然无法正常工作。

https://nuget.org/api/v2/
%teamcity.nuget.feed.server%

这不是nuget.org软件包源的正确URL吗?我如何告诉它同时使用两个源?

我在JetBrains开发者讨论版上问过这个问题,但没有得到任何回复。

4个回答

12

我遇到了同样的问题,有趣的是我的Nuget源被指定为:
https://www.nuget.org/api/v2/
http://nugetserver/nuget
在第二个URL中添加一个斜杠以使它变成http://mynugetserver/nuget/修复了问题。花了我一些时间才弄清楚,现在我的Nuget安装程序构建步骤正常运行。


9
显然,NuGet安装器构建步骤甚至都不需要。我编辑了.nuget/NuGet.targets文件,包含了两个路径,并删除了NuGet安装器构建步骤,现在它可以正常工作了。
最初设置TeamCity用于此解决方案时,如果没有NuGet Installer步骤,就不能正常工作,所以我不知道我做了什么其他不同的事情来使其正常工作,但也许NuGet.targets文件一直是关键。 这篇博客文章上的评论指引我朝着正确的方向。

1
这个解决方法适用于TC的私有源吗?我在msbuild步骤中遇到了一个错误,说它无法在非交互会话中请求凭据。我正在尝试使用私有源找到解决方案,也许你可以帮忙? - mare
我还没有尝试设置私人订阅,所以我不知道这是否适用于该场景。 - CoderDennis
1
是的,我也必须这样做。以下是一个示例: <ItemGroup Condition=" '$(PackageSources)' == '' "> <PackageSource Include="https://nuget.org/api/v2/" /> <PackageSource Include="http://exampleprivatefeed/" /> </ItemGroup> - absynce
我相信这是正确的,如果你只想获取项目中当前安装的包版本,那么你不需要NuGet Installer步骤。如果你想首先更新packages.config中指定的包,你需要在构建之前先运行NuGet Installer步骤,以便根据你的Nuget Installer步骤设置来拉取更新。在我们的nuget.targets文件中,我已经添加了我们自定义的nuget内部服务器,所以当前的包被拉下来了,效果很好,但这并不能得到更新,因此需要Nuget Installer步骤。听起来合理吗? - user514005

2

我也遇到了同样的问题。我正在使用TeamCity v10,需要使用Nuget步骤(我的解决方案中没有.targets文件)。然而,我使用了另一种方法来添加“额外”的软件包源:

c:\BuildAgent\tools\NuGet.CommandLine.2.7.0\tools\Nuget.exe sources Add -Name TeamCity-feed -Source http://myteamcityserver/guestAuth/app/nuget/v1/FeedService.svc/

之后,我添加了一个Nuget安装步骤,并在TeamCity的包源框中没有指定任何内容,现在可以无问题地恢复来自公共feed nuget.org和我的内部feed的两个软件包。


2

您可以修改存储在AppData本地文件夹中的NuGet.Config,以供TeamCity运行的用户使用,而不必修改每个项目的.targets文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <!--<add key="repositoryPath" value="J:\TeamCity7\buildAgent\work\my_shared_packages_dir" />-->
  </config>
  <packageRestore>
    <add key="enabled" value="True" />
  </packageRestore>
  <packageSources>
    <add key="NuGet official package source" value="https://nuget.org/api/v2/" />
    <add key="MMG TeamCity Nuget Server" value="http://myteamcityserver/guestAuth/app/nuget/v1/FeedService.svc" />
  </packageSources>
  <activePackageSource>
    <add key="All" value="(Aggregate source)" />
  </activePackageSource>
</configuration>

在每个项目的.nuget文件夹中的NuGet.exe将首先遵循此处设置的配置,然后应用于.targets文件中进行的任何"覆盖"。

你可以在以该用户身份运行时,在服务器上使用“NuGet sources add”命令来执行相同的操作。 - Johann Strydom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接