簡體   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