TFS 构建过程无法拉取 nuget 包
TFS build process can't pull nuget package
我已经在 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.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\s\xxx.Api.Client.Tests\xxx.Api.Client.Tests.csproj]
C:\Program Files\dotnet\sdk.1.301\NuGet.targets(128,5): error : The data is invalid. [D:\Build\agent\_work\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 恢复任务,它可以通过从内部提要中提取来正常工作。我感到难过的是“数据无效”错误,我在任何地方都找不到对它的引用。
感谢您的帮助。
NuGet 4.8.2 及更高版本支持 Azure Artifacts Credential Provider,它会在需要时自动获取提要凭据。我们需要使用 nuget 提要的 v3 端点。例如:xxx.xx.x.xx:8080/tfs/xxx/_packaging/xxx/nuget/v3/index.json
。
请参考this document.
我们可以使用 Azure Artifacts Credential Provider 来验证和恢复提要。作为 .NET 开发工作流的一部分,Azure Artifacts Credential Provider 自动获取恢复 NuGet 包所需的凭据。
我已经在 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.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\s\xxx.Api.Client.Tests\xxx.Api.Client.Tests.csproj]
C:\Program Files\dotnet\sdk.1.301\NuGet.targets(128,5): error : The data is invalid. [D:\Build\agent\_work\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 恢复任务,它可以通过从内部提要中提取来正常工作。我感到难过的是“数据无效”错误,我在任何地方都找不到对它的引用。
感谢您的帮助。
NuGet 4.8.2 及更高版本支持 Azure Artifacts Credential Provider,它会在需要时自动获取提要凭据。我们需要使用 nuget 提要的 v3 端点。例如:xxx.xx.x.xx:8080/tfs/xxx/_packaging/xxx/nuget/v3/index.json
。
请参考this document.
我们可以使用 Azure Artifacts Credential Provider 来验证和恢复提要。作为 .NET 开发工作流的一部分,Azure Artifacts Credential Provider 自动获取恢复 NuGet 包所需的凭据。