版本冲突:System.Text.Json

3

我有一个包含2个项目的解决方案:

  • netcoreapp3.1 Azure Function
  • netstandard2.1 库

netcoreapp3.1 项目引用了库项目。库项目使用了 System.Text.Json API。当我构建解决方案时,会出现以下错误:

程序集 'System.Text.Json',标识为 'System.Text.Json, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51',使用了 'System.Runtime, Version=4.2.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a',其版本高于已引用程序集 'System.Runtime',标识为 'System.Runtime, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'

我尝试在 netstandard2.1 项目中显式安装 System.Text.Json 4.7.2。 应用现在可以编译和工作。然而,在构建过程中,我会收到一些警告,如下所示:

##[警告]/usr/share/dotnet/sdk/5.0.101/Microsoft.Common.CurrentVersion.targets(2123,5): 警告 MSB3243: 无法解决“System.Text.Json, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51”和“System.Text.Json, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51”的冲突。随意选择“System.Text.Json, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51”。

我做错了什么?


1
只需明确引用一个软件包的版本。 - undefined
根据我所了解,使用.Net Core程序集与.Net类库通常不太兼容,例如在更新过程中会持续出现此类错误。建议考虑使用.Net Core包替代。 - undefined
@DanielA.White 你这是什么意思? - undefined
使用 <PackageReference Include="System.Text.Json" Version="..." /> - undefined
@Batuhan 我的应用程序是 netcoreapp3.1,所以它没有 Newtonsoft.Json。我在我的机器上安装了 .NET 5(也有 3.1)。当你构建一个项目时,它会自动选择最新的版本,这就是为什么它使用 .NET 5 来构建它。 - undefined
显示剩余5条评论
3个回答

1
有时候Visual Studio会为你已安装的SDK(如.NET 5)推荐NuGet包,即使你的项目目标是.NET 3.1,就像你的情况一样。
请使用“管理解决方案的NuGet包...”

enter image description here

在管理器中,您可能会发现有一些软件包可以合并(这样它们就可以使用相同的版本)。

enter image description here

如果没有的话,你将不得不在管理器中搜索和挑选。寻找版本号为5.*而不是3.1.*的软件包。你也可能会发现略微不同的版本。尽量使它们在你的解决方案中保持一致。

1

0
对我来说,解决这个问题的方法是降级 Nuget 包 System.Text.Json。
这样一来,依赖于它的其他 Nuget 包也会被降级。然后,我再将所有的包更新到最新版本。

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