Mat*_*zen 5 .net c# nuget docker
当我尝试dotnet restore按照构建它的RUN指令运行时,出现Dockerfile以下错误:
/src/Anonymized.Tests/Anonymized.Tests.csproj : error NU3028: Package 'Microsoft.Win32.SystemEvents 5.0.0' from source 'https://api.nuget.org/v3/index.json': The author primary signature's timestamp found a chain building issue: UntrustedRoot: self signed certificate in certificate chain [/src/Anonymized.sln]
/src/Anonymized.Tests/Anonymized.Tests.csproj : error NU3037: Package 'Microsoft.Win32.SystemEvents 5.0.0' from source 'https://api.nuget.org/v3/index.json': The author primary signature validity period has expired. [/src/Anonymized.sln]
Run Code Online (Sandbox Code Playgroud)
我所有的 NuGet 包都会发生这种情况。
如果我在容器外运行它,它工作得很好。
我正在使用图像mcr.microsoft.com/dotnet/sdk:5.0。可能是我运行它的 Docker 映像以某种方式过期了证书?
它一直工作到几个小时前。
编辑:不确定这是否是重要信息,但这都是在 Linux 中从 GitHub Actions 运行的。
编辑:
解决方案一:
正如 github 上提到的,如果您的 Dockerfile 看起来与此类似:
FROM mcr.microsoft.com/dotnet/sdk:5.0将其更改为
FROM mcr.microsoft.com/dotnet/sdk:5.0-alpine, 或者FROM mcr.microsoft.com/dotnet/sdk:5.0-focal解决方案2:
在运行恢复之前将其添加到您的 Dockerfile 中:
RUN curl -o /usr/local/share/ca-certificates/verisign.crt -SsL https://crt.sh/?d=1039083 && update-ca-certificates
Run Code Online (Sandbox Code Playgroud)
出于安全原因,您可能需要下载并验证证书并将其保存到您的存储库中。这是验证软件包时间戳所需的证书,默认情况下包含在 alpine 和 focus 中,但 debian 中缺少该证书。
解决方案3:
等待微软修复问题。他们正在 github 上跟踪它,Nuget 已将其状态设置为降级,直到问题解决: https: //status.nuget.org/
原答案:
据我所知,Docker 在这种情况下是正确的。手动下载任何 NuGet 包,即:https://www.nuget.org/api/v2/package/System.ComponentModel.Annotations/5.0.0 打开文件并查找 .signature.p7s 文件并使用以下命令打开它默认程序。它向我显示 Microsoft 颁发的证书实际上已于当地时间今天下午 1 点过期。
我不知道为什么这对于 docker 之外的工具来说不是问题。我知道有一种方法可以完全禁用此处解释的 NuGet 验证以及有关有效期的更多信息: https: //learn.microsoft.com/en-us/nuget/reference/errors-and-warnings/nu3028 https://learn.microsoft.com/en-us/nuget/reference/errors-and-warnings/nu3028 https:// /learn.microsoft.com/en-us/nuget/reference/errors-and-warnings/nu3037
不过,我真的不想完全禁用这些检查。可悲的是我也不知道在这种情况下如何进行
| 归档时间: |
|
| 查看次数: |
989 次 |
| 最近记录: |