.NET 5 SDK 发布自包含尝试恢复 2.0.0 运行时?

问题描述

在仅安装了 .NET 5.0 SDK (5.0.103) 的计算机上,尝试将任何应用程序dotnet publish 作为独立部署都会失败,即使是简单的空白控制台应用程序也是如此。我使用其他 RID 获得相同的结果,例如 win-x64:

dotnet publish test.sln -c Release -r linux-x64 --self-contained true

错误消息表明由于某种原因构建正在请求 v2.0.0 运行时。这些运行时无法从我们的内部包存储 (Artifactory) 中获得——但我无法弄清楚为什么构建首先会请求该版本。

在请求结束时注意 semVerLevel=2.0.0

Determining projects to restore...
retrying 'FindPackagesByIdAsyncCore' for source 
'https://[artifactoryURL]/FindPackagesById()?
id='Microsoft.NETCore.App.Runtime.linux-x64'&semVerLevel=2.0.0'.
Response status code does not indicate success: 403 (Forbidden).

我在 SDK 3.1 下使用 SCD 没有问题,尽管将项目框架回滚到 3.1(但安装了 SDK 5.0)会导致同样的问题。

我尝试了其他开关,如单文件和准备运行,但没有成功。我无法在我的个人机器上重现这个,但它是在一个稍微更新的版本上(SDK 5.0.200 和 VS2019 16.9.0,而工作时是 16.8.5,他们允许我们现在使用最新的版本)。我觉得我们的内部打包团队以某种方式搞砸了 VS 或 SDK 的安装,但他们坚持认为他们的更改很小并且不会导致这种情况。

这些依赖在哪里表达?为什么会发生?我该如何解决

解决方法

两个问题:

  • 403 错误是因为 NuGet CLI 使用的缓存凭据已过期
  • semVerLevel=2.0.0 指定 NuGet API 版本,而不是请求的包

运行它来更新我的缓存凭据修复了它:

nuget update source "Artifactory" --username ""xxxx"" --password ""xxxx""