TFS2012构建服务器无法从内部存储库中还原NuGet包

14

我已经建立了一个内部的NuGet仓库(位于我们服务器上的共享文件夹),并将其添加到了我的电脑上Visual Studio NuGet设置的"可用来源"列表中。我能够成功地从这个仓库安装软件包到我的解决方案中。

然而,在TFS服务器上,构建失败了,因为它无法恢复到这个特定的软件包(消息:"无法找到软件包'xxx'的版本'xxx'")。该解决方案配置为"启用NuGet包还原",这对通过nuget.org安装的软件包可以正常工作。只是它不能从我们的内部仓库还原软件包。

仓库文件夹/共享上的权限没有问题。我错过了什么?

我猜想我也必须在TFS服务器上配置Visual Studio的"可用来源",但这些设置显然是特定于用户的?构建服务以NETWORK SERVICE身份运行,那我如何为该用户配置NuGet?

2个回答

29

您可以将源添加到TFS构建服务器上的机器范围配置中,这样在执行软件包还原时,它将包含在源列表中。

我的做法是创建一个文件%ProgramData%\NuGet\Config\sources.config,其中包含:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="internal source" value="http://internal_server/nuget/" />
  </packageSources>
</configuration>
文件的名称无关紧要,它是文件所在位置。Nuget会获取该文件夹下的任何.config文件。
http://docs.nuget.org/docs/reference/NuGet-Config-File#NuGet_config_extensibility_point
更新2016-11-18根据http://blog.nuget.org/20161121/introducing-nuget4.0.html(有破坏性变更),VS 2017+和NuGet 4.0+将机器范围配置文件夹的位置更改为%ProgramFiles(x86)%\NuGet\Config\

你是不是想说 %ProgramData%\NuGet\Config\ (没有空格)? - rob
1
我们使用TFS 2015和Visual Studio 2015来进行构建,所以我想要编辑文件C:\ProgramData\NuGet\Config\VisualStudio\14.0\Microsoft.VisualStudio.config,但是不行。%ProgramData%\NuGet\Config\sources.config才是正确的答案。 - mhenry1384
这让我疯了。我的 NuGet.Config 条目(位于 C:\Users\MyUser\AppData\Roaming\NuGet 目录下)在构建服务器上无法识别。现在,“nuget.exe sources list” 报告了所有自定义源。 - granadaCoder

4
改变您的构建以使用特定帐户运行。然后您可以使用该帐户登录,并证明所有这些小问题。
根据您进行NuGet还原的方式,您是否已更新目标文件以使用本地源的位置?
<ItemGroup Condition=" '$(PackageSources)' == '' ">
        <!-- Package sources used to restore packages. By default, registered sources under %APPDATA%\NuGet\NuGet.Config will be used -->
        <!-- The official NuGet package source (https://www.nuget.org/api/v2/) will be excluded if package sources are specified and it does not appear in the list -->
        <!--
            <PackageSource Include="https://www.nuget.org/api/v2/" />
            <PackageSource Include="https://my-nuget-source/nuget/" />
        -->
      <PackageSource Include="http://MyLocalFeed/nuget/nuget"/>

    </ItemGroup>

我尝试过这个,但最初它没有起作用。后来我意识到构建服务器正在运行旧版本的NuGet(2.2)。将其更新为2.8后,它就可以工作了。我猜旧版本无法理解NuGet.targets文件中的多个软件包源语法。 - Andrew Stephens
@AndrewStephens 正确,包恢复始于 NuGet 2.7。 - Giulio Vian

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