【问题标题】:TFS2012 build server not restoring NuGet packages from in-house repositoryTFS2012 构建服务器未从内部存储库还原 NuGet 包
【发布时间】:2016-11-18 22:15:30
【问题描述】:

我已经设置了一个内部 NuGet 存储库(我们其中一台服务器上的共享文件夹),并将其添加到我 PC 上 Visual Studio NuGet 设置中的“可用源”列表中。我能够从这个存储库成功地将一个包安装到我的解决方案中。

但是在 TFS 服务器上构建失败,因为它无法恢复这个特定的包(消息:“无法找到包 'xxx' 的版本 'xxx'”)。该解决方案配置为“启用 NuGet 程序包还原”,这对于通过 nuget.org 安装的程序包运行良好。它只是没有从我们的内部存储库中恢复包。

存储库文件夹/共享的权限很好。我错过了什么?

我猜我也必须在 TFS 服务器上配置 Visual Studio 的“可用源”,但大概这些设置是用户特定的?构建服务作为 NETWORK SERVICE 运行,那么如何为该用户配置 NuGet?

【问题讨论】:

    标签: nuget tfsbuild


    【解决方案1】:

    您可以将源添加到 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\(没有空格)吗?
    • 我们在构建中使用 TFS 2015 和 Visual Studio 2015,所以我想我想编辑文件 C:\ProgramData\NuGet\Config\VisualStudio\14.0\Microsoft.VisualStudio.config,但不是。 %ProgramData%\NuGet\Config\sources.config 就是答案。
    • 这让我发疯了。我的条目 NuGet.Config(在 C:\Users\MyUser\AppData\Roaming\NuGet 目录中)未被识别(在我的构建服务器上)。 “nuget.exe 源列表”现在报告我的所有自定义源。
    【解决方案2】:

    更改您的构建以作为特定帐户运行。然后,您可以使用该帐户登录并证明所有这些小问题。

    根据您执行 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 文件中的多包源语法。
    • @AndrewStephens 正确,包恢复从 NuGet 2.7 开始
    猜你喜欢
    • 2018-07-13
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 2012-10-27
    • 2023-03-28
    • 2014-08-29
    • 2018-05-28
    相关资源
    最近更新 更多