.NET 6 不支持 .NET 标准 2.1?

Leo*_*rdo 17 .net nuget .net-6.0

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

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

有解决方法吗,或者我必须更新此包以声明 .NET 6?

ziv*_*kan 28

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

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

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

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

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

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

  • 这是因为旧版本的 NuGet 会错误地认为包和项目都使用 .NET Framework 版本 6.0,而该版本实际上并不存在。这还意味着您没有性能改进或错误修复,也没有可用的包源映射等功能。我仍然强烈建议您停止使用“NuGetCommand”,而是直接从命令行任务调用“dotnet Restore”或“msbuild -t:restore”。 (4认同)
  • 我注意到该消息谈论的是 net60,但没有句点,而正确的 TFM 是 net6.0。或许这里面出了点问题…… (2认同)