混合私有nuget feed和NEST

时间:2017-03-29 15:35:49

标签: c# nuget .net-core

dotnet restore在我的某些软件包上意外失败,我无法弄清楚原因。

我有一个通过VSTS包扩展托管的私有nuget repo,我的NuGet.Config看起来像(如此处所述https://www.visualstudio.com/en-us/docs/package/nuget/auth#dotnet-core

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    <add key="MyPackages"     value="https://{myaccount}.pkgs.visualstudio.com/_packaging/{myfeed}/nuget/v3/index.json"` />
  </packageSources>
  <packageCredentials>
    <MyPackages>
        <add key="Username" value="vsts" />
        <add key="ClearTextPassword" value="{my PAT}" />
    </MyPackages>
  </packageCredentials>
</configuration>

如果我使用dotnet new console创建新项目并添加对我的Feed上托管的包的引用,则还原工作正常。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="My.Lib" Version="1.0.0"></PackageReference>
  </ItemGroup>
</Project>

但是,如果我还包含对NEST版本2.5.0(或任何版本)的软件包引用,则dotnet恢复将失败

C:\Program Files\dotnet\sdk\1.0.0\NuGet.targets(97,5): error : Unable to load the service index for source https://{myaccount}.pkgs.visualstudio.com/_packaging/{myfeed}/nuget/v3/index.json.\r `[C:\Users\test\dotnet\dotnet.csproj]
C:\Program Files\dotnet\sdk\1.0.0\NuGet.targets(97,5): error :   Response status code does not indicate success: 401 (Unauthorized). [C:\Users\test\dotnet\dotnet.csproj]

但奇怪的是,用其他任何恢复替换NEST都会有效。例如,添加ElasticSearch.Net 2.5.0将正常工作。

如果我从我的nuget.config中删除我的包凭据和私有nuget feed并且仅引用NEST,那么它可以工作 - 但是我无法访问我的私人订阅源。

最后最奇怪的是昨天恢复工作正常,但现在对我和我的同事我们无法恢复。

这是VSTS包问题吗? NEST可能有什么不同?

重现的步骤

预期行为

dotnet restore不应该无法恢复

实际行为

dotnet restore fails - citing a 401 unauthorized response from the private nuget feed
C:\Program Files\dotnet\sdk\1.0.0\NuGet.targets(97,5): error : Unable to load the service index for source https://{account}.pkgs.visualstudio.com/_packaging/{feed}/nuget/v3/index.json.\r [C:\Users\davidf\temp\dotnet\dotnet.csproj]
C:\Program Files\dotnet\sdk\1.0.0\NuGet.targets(97,5): error :   Response status code does not indicate success: 401 (Unauthorized). [C:\Users\davidf\temp\dotnet\dotnet.csproj]

环境数据

dotnet --info输出:

dotnet --info
.NET Command Line Tools (1.0.0)

Product Information:
 Version:            1.0.0
 Commit SHA-1 hash:  e53429feb4

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.14393
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\1.0.0

完整控制台输出

C:\Users\davidf\temp\dotnet>dotnet restore -v diag
C:\Program Files\dotnet\sdk\1.0.0\MSBuild.dll /NoLogo /ConsoleLoggerParameters:Verbosity=Minimal /Logger:Microsoft.DotNet.Tools.MSBuild.MSBuildLogger,C:\Program Files\dotnet\sdk\1.0.0\dotnet.dll /m /t:Restore /v:m /verbosity:diag .\dotnet.csproj
  Restoring packages for C:\Users\davidf\temp\dotnet\dotnet.csproj...
C:\Program Files\dotnet\sdk\1.0.0\NuGet.targets(97,5): error : Unable to load the service index for source https://{account}.pkgs.visualstudio.com/_packaging/{feed}/nuget/v3/index.json.\r [C:\Users\davidf\temp\dotnet\dotnet.csproj]
C:\Program Files\dotnet\sdk\1.0.0\NuGet.targets(97,5): error :   Response status code does not indicate success: 401 (Unauthorized). [C:\Users\davidf\temp\dotnet\dotnet.csproj]

更多信息 -

似乎当我只使用官方nuget.org来源时,NEST将像预期的那样工作任何其他nuget包。如果包名中有拼写错误,则会出现error : Unable to resolve NestOops

之类的错误

但是当我将我的nuget源作为附加包源时,包名称的任何拼写错误都会导致我的Feed中出现401。我仍然不知道为什么NEST有同样的错误。

1 个答案:

答案 0 :(得分:2)

它看起来像是误报! nuget配置不太正确 - <packageSourceCredentials>应该是 var base64String = 'data:image/png;base64....' var imgObj = { url: base64String } <img src=''+ imgObj.url +''/> 。我的猜测是来自VSTS提要的一些软件包被缓存了(一个单独的项目有自己的配置和正确的元素,将它们放在缓存中开始)这就是为什么它们似乎正确解析的原因,即使它们不是'正确认证。然后,每当查找不在缓存中的包时,它将使用错误的凭据命中我们的订阅源并失败。