【问题标题】:.NET 6 does not support .NET Standard 2.1?.NET 6 不支持 .NET Standard 2.1?
【发布时间】:2021-12-06 18:58:28
【问题描述】:

我刚刚将一个项目从 .NET 5 更新到 .NET 6。它可以在本地完美编译和运行。当我将它推送到 azure 并运行我的 CI 管道时,会报告一个错误:

NU1202:MyStandardPackaged 1.0 包与 net60 不兼容(.NETFramework,Version=v6.0)。包 MyStandardPackaged 1.0 支持:netstandard2.1 (.NETStandard,Version=v2.1)

是否有解决方法,或者我必须更新这个声明 .NET 6 的包?

【问题讨论】:

  • netstandard2.1 platform support 声明 .NET 5+ 应该支持它。
  • 我真的会对此感到惊讶,我对此表示怀疑 - 想知道这是否更有可能是您的 CI 服务器上的构建工具的问题。然而!添加净 6 TFM 应该是完全可能(并且可以说:可取)。同样,我并不是说它是(或不是)必要的,但是;这似乎不太可能。

标签: .net nuget .net-6.0


【解决方案1】:

如果您仔细查看您发布的错误消息:

NU1202:MyStandardPackaged 1.0 包与 net60 不兼容(.NETFramework,版本=v6.0)。包 MyStandardPackaged 1.0 支持:netstandard2.1 (.NETStandard,Version=v2.1)

注意它说net6.0.NETFramework,Version=v6.0。但是,.NET 6 实际上是.NETCoreApp,Version=v6.0

因此,我断定您正在使用一些甚至不了解 .NET 5 的旧版本 NuGet 来恢复您的项目/解决方案。

我的建议是避免在 Azure DevOps 中执行 NuGetCommand 任务。我想不出任何使用它的理由,CI 脚本所需的所有重要功能都存在于dotnet CLI 和MSBuild.exe 中。

因此,如果您的解决方案/repo 中的所有项目都是 SDK 样式(在项目文件中包含 Sdk="whatever"),则使用 dotnet restore。如果您甚至有一个非 SDK 样式的项目(目录中的每个 .cs 都在 XML 中列出),那么请使用 msbuild -t:restore。这样,您再也不会遇到 NuGet 版本不匹配的问题了。

【讨论】:

  • 我实际上正在使用NuGetCommand,在我重新发布我的项目后明确添加了.Net 6,这一切都奏效了......
  • 那是因为旧版本的 NuGet 会错误地认为包和项目都在使用 .NET Framework 6.0 版,而实际上并不存在。这也意味着您没有性能改进或错误修复,或包源映射等功能可供您使用。我仍然强烈建议您停止使用NuGetCommand,而是直接从命令行任务调用dotnet restoremsbuild -t:restore
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-09
  • 1970-01-01
  • 2019-03-11
  • 1970-01-01
  • 2021-05-29
  • 1970-01-01
相关资源
最近更新 更多