TFS 构建过程无法提取 nuget 包

Posted

技术标签:

【中文标题】TFS 构建过程无法提取 nuget 包【英文标题】:TFS build process can't pull nuget package 【发布时间】:2021-07-04 17:26:30 【问题描述】:

我在 TFS 16.131.28601.4 上设置了一个管道。当它执行 dotnet restore 任务时,它会尝试从内部提要中提取包,该提要与 packageSourceCredentials 一起在 nuget.config 中定义。

拉包失败我得到的错误是:

Restoring packages for .NETCoreApp,Version=v3.1...
Retrying 'FindPackagesByIdAsyncCore' for source 'http://xx.xxx.x.xx:8080/tfs/PVS/_packaging/xxx/nuget/v2/FindPackagesById()?id='xxx.Api.Client'&semVerLevel=2.0.0'.
The data is invalid.
Retrying 'FindPackagesByIdAsyncCore' for source 'http://xx.xxx.x.xx:8080/tfs/PVS/_packaging/xxx/nuget/v2/FindPackagesById()?id='xxx.Api.Client'&semVerLevel=2.0.0'.
The data is invalid.
1>C:\Program Files\dotnet\sdk\3.1.301\NuGet.targets(128,5): error : Failed to retrieve information about 'xxx.Api.Client' from remote source 'http://xx.xxx.x.xx:8080/tfs/PVS/_packaging/xxx/nuget/v2/FindPackagesById()?id='xxx.Api.Client'&semVerLevel=2.0.0'. [D:\Build\agent\_work\5\s\xxx.Api.Client.Tests\xxx.Api.Client.Tests.csproj]
C:\Program Files\dotnet\sdk\3.1.301\NuGet.targets(128,5): error :   The data is invalid. [D:\Build\agent\_work\5\s\xxx.Api.Client.Tests\xxx.Api.Client.Tests.csproj]
NuGet.Protocol.Core.Types.FatalProtocolException: Failed to retrieve information about 'xxx.Api.Client' from remote source 'http://xx.xxx.x.xx:8080/tfs/PVS/_packaging/xxx/nuget/v2/FindPackagesById()?id='xxx.Api.Client'&semVerLevel=2.0.0'.
---> Internal.Cryptography.CryptoThrowHelper+WindowsCryptographicException: The data is invalid.

nuget.config 如下所示:



<configuration>
  <packageSources>
    <!--To inherit the global NuGet package sources remove the <clear /> line below -->
    <clear />
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    <add key="xxx" value="http://xx.xxx.xx.xx:8080/tfs/PVS/_packaging/xxx/nuget/v2" />
  </packageSources>
  <packageSourceCredentials>
    <xxx>
      <add key="Username" value="xxxx" />
      <add key="Password" value="xxxxxxxxxxxxxxxxxxxxxxxxxxxx==" />
    </xxx>
  </packageSourceCredentials>
</configuration>

如果我添加一个 nuget 还原任务,它可以通过从内部提要中提取来正常工作。我被难住的地方是“数据无效”错误,我在任何地方都找不到对它的引用。

感谢您的帮助。

【问题讨论】:

根据关于Use NuGet with Azure DevOps Services feeds的文档,我们可以通过将/v3/index.json替换为/v2来使用2.x客户端。但是Use dotnet with Azure Artifacts feeds 的文档并没有提到我们可以做到这一点。 @WalterQian-MSFT 谢谢,这为我指明了正确的方向,一旦我将 Azure 凭据提供程序添加到我的 Nuget CI 管道,它就能够从内部提要进行身份验证和恢复:@987654323 @ 我还必须使用 nuget 提要的 v3 端点:xxx.xx.x.xx:8080/tfs/xxx/_packaging/xxx/nuget/v3/index.json 很高兴知道这些文件对您有帮助。我在答案中总结了您的评论,您可以mark the answer 这将使有相同问题的人更容易找到答案。非常感谢。 【参考方案1】:

NuGet 4.8.2 及更高版本支持 Azure 工件凭据提供程序,它会在需要时自动获取源凭据。我们需要使用 nuget 提要的 v3 端点。例如:xxx.xx.x.xx:8080/tfs/xxx/_packaging/xxx/nuget/v3/index.json。 请参考this document。

我们可以使用Azure Artifacts Credential Provider 来验证和恢复提要。 Azure Artifacts Credential Provider 可自动获取还原 NuGet 包所需的凭据,作为 .NET 开发工作流的一部分。

【讨论】:

以上是关于TFS 构建过程无法提取 nuget 包的主要内容,如果未能解决你的问题,请参考以下文章

用于 TFS 持续集成的 NuGet 包

在 TFS 构建中找不到 NuGet 包版本?

下载Nuget包会出现错误“包中包含一个不安全的提取条目”为什么?

缺少 TFS msbuild Nuget 包

TFS MSBuild 不为解决方案中的网站恢复 nugets

从 Nuget 包中自动提取本机和托管 DLL