.NET 6不支持.NET Standard 2.1?

16

我刚将一个项目从 .NET 5 升级到 .NET 6。本地编译和运行都完美无误。但当我将其推送到 Azure 并在 CI pipeline 中运行时,出现以下错误:

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

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


netstandard2.1平台支持指出.NET 5+应该支持它。 - Guru Stron
1
我会对此感到非常惊讶,并且持怀疑态度 - 怀疑这更可能是您的CI服务器上构建工具的问题。然而!添加net 6 TFM应该是完全* 可能的(可以说是理想的)。再次强调,我并不是说必须这样做或不必这样做,但这似乎非常不可能。 - Marc Gravell
1
当我意外地使用较旧版本的Visual Studio启动我的项目时,我遇到了这个错误。当我在VS 2022中关闭并重新打开它时,这些错误消失了。(虽然不是与OP相同的情况,但可能会帮助其他人。) - Vaccano
1个回答

26
如果您仔细查看您发布的错误信息:
NU1202: 包 MyStandardPackaged 1.0 与 net60 (.NETFramework,Version=v6.0) 不兼容。包 MyStandardPackaged 1.0 支持: netstandard2.1 (.NETStandard,Version=v2.1)
请注意,它说 net6.0.NETFramework,Version=v6.0。然而,.NET 6 实际上是 .NETCoreApp,Version=v6.0
因此,我得出结论,您正在使用一些旧版本的NuGet来恢复您的项目/解决方案,该版本甚至不知道 .NET 5。
我的建议是避免在Azure DevOps中使用NuGetCommand任务。我想不出任何理由使用它,所有CI脚本所需的重要功能都存在于dotnet CLI和MSBuild.exe中。
因此,如果您的解决方案/存储库中的所有项目都是SDK样式(在项目文件中包含Sdk="whatever"),则使用dotnet restore。如果您有一个非SDK样式的项目(目录中的每个.cs都列在XML中),则使用msbuild -t:restore。 这样,您将永远不会再遇到NuGet版本不匹配的问题。

我实际上正在使用 NuGetCommand,在我明确添加了 .Net 6 并重新发布我的项目之后,一切都正常工作了... - Leonardo
3
这是因为旧版本的NuGet会错误地认为包和项目都使用.NET Framework 6.0版本,而实际上并不存在。这也意味着您无法获得性能改进、错误修复或诸如包源映射之类的功能。我仍然强烈建议您停止使用NuGetCommand,而是直接从命令行任务中调用dotnet restoremsbuild -t:restore - zivkan
实际上,这也是Azure DevOps团队自己的建议:https://github.com/NuGet/Home/issues/11406#issuecomment-982099267 https://github.com/microsoft/azure-pipelines-tasks/issues/15542#issuecomment-982091805 - zivkan
1
我注意到该信息中提到的TFM为net60,但正确的应该是net6.0。也许存在问题... - Palec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接