繁体   English   中英

NuGet 恢复失败 - .NET 7.0 与 .NET 标准 2.0 的兼容性

[英]NuGet Restore Fails - .NET 7.0 compatibility with .NET Standard 2.0

我有一个 .NET 7.0 ASP.NET 项目的解决方案,该项目在同一解决方案中的 .NET 标准 2.0 库中有一个项目参考。 在我的机器上所有构建和执行都很好。

我在 Azure DevOps 中有一个管道,用于构建项目并旨在将 ASP.NET 项目部署到服务器。 在构建之前,它运行任务NuGetCommand@2以针对**/*.sln执行 NuGet 恢复。 这是在windows-2022 Azure VM 映像上运行的。

由于以下错误,恢复炸弹:

Package Microsoft.OpenApi 1.4.3 is not compatible with net70 (.NETFramework,Version=v7.0). Package Microsoft.OpenApi 1.4.3 supports: netstandard2.0 (.NETStandard,Version=v2.0)
Errors in D:\a\1\s\MyApp.csproj
    Project MyLibrary is not compatible with net70 (.NETFramework,Version=v7.0). Project MyLibrary supports: netstandard2.0 (.NETStandard,Version=v2.0)

这对我来说就像是在说您不能在 .NET 7.0 项目中使用 .NET 标准 2.0 库,但兼容性文档似乎另有说明。 这里发生了什么?

12/3更新

在调查和参考这个问题的过程中,我发现了这张票Github_Nuget_Tool_Cache_issue#16800 ,更多的开发人员对这种设计行为感到困惑。

到目前为止,唯一的解决方法似乎是额外安装6.4.x

您还可以提出功能请求票以引起更多关注,以便将来对此行为进行更新。

================================================ ==============

12/1 的原始帖子

我用nuget tool installer 任务安装了最新的nuget版本的6.4.0.123来确保Microsoft.OpenApi 1.4.3与.net7.0的兼容性。

================================================ ====

12月2日更新

Microsoft.OpenAPI.1.4.3的源码页面来看,这个版本是为了兼容 DotNet 7.0 而设计的。

在调查过程中,我查看了调试日志,发现 nuget 还原任务在 window-2022 中使用4.x的缓存版本。 我想这个版本肯定与 do.net 70 不兼容。 在此处输入图像描述

将后面的nuget版本安装到6.4.x后,一切都兼容了。 在此处输入图像描述

所以我想 nuget 版本可能是导致不同行为的关键。 (甚至可能是设计使Nuget 4.1无法识别Microsoft.OpenAPI1.4.3Do.net 7.0之间的兼容性)

参考

NuGet 4.9 发行说明

NuGet 5.11 发行说明

NuGet 6.4 发行说明

基于@Ceeno 的回答,但包括那些运行 YAML 管道的人。

https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/nuget-tool-installer-v1?view=azure-pipelines

我只是选择获取最新版本。

- task: NuGetToolInstaller@1
  displayName: 'Update NuGet'
  inputs:
    checkLatest: true

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM