使用 Web Api、C# 的 Web 应用程序中的 Newtonsoft.Json 6.0.0.0 和 12.0.0.0 冲突

zor*_*rci 2 c# json.net visual-studio-2019 webapi

我在 Visual Studio 2019 中启动了一个新的 Web 应用程序。我添加了一个 Web Api。不久之后或同时(不记得了),我开始收到这样的警告:

Warning     No way to resolve conflict between "Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" and "Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed". Choosing "Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" arbitrarily.
Run Code Online (Sandbox Code Playgroud)

我注意到但没有做任何事情,因为我决定等到它给我带来问题。

而现在...

我将要使用一个 JSon 对象,但是在写这个的时候:

JObject jObject = JObject.Parse(result);
Run Code Online (Sandbox Code Playgroud)

编译器给了我这个错误:

Error   CS0433  The type 'JObject' exists in both 'Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' and 'Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'
Run Code Online (Sandbox Code Playgroud)

我在网上搜索了一下,得出的结论如下:

  • 看起来它是Microsoft.AspNet.WebApi.Client是唯一安装的包,它依赖于 Newtonsoft.Json (>= 6.0.4)
  • 我已经安装了 Newtonsoft.Json (12.0.3)
  • 在解决方案资源管理器中。在参考列表中,我只有 1 个参考。这是 12.0.3 的那个。
  • 在 Web.Config 中,我有这个条目(并且只有 Newtonsoft.Json 的这个条目)。
    • <dependentAssembly><assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/><bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0"/></dependentAssembly>
  • 在我的 .csproj 中,我可以在 3 个不同的 ItemGroups 中看到 3 个不同的引用:
    • 一个用于 v. 12.0.0.0
    • 一个适用于 v. 12.0.2
    • 一个用于 v. 12.0.3
  • 我试图卸载软件包 Newtonsoft.Json,但不允许,因为其他软件包依赖于此。
  • 我在包管理器控制台中运行了这个命令:Update-Package Newtonsoft.Json,它告诉我没有新的更新可用。

而现在,我已经没有想法了。我被卡住了。有谁知道该怎么做?

****新更新**** 我找到了 6.0.0.0。请看一下图片:

在资源中,我双击了 Newtonsoft.Json 引用,在对象浏览器中我可以看到 6.0.0.0 和 12.0.0.0。

在资源中,我双击了 Newtonsoft.Json 引用,在对象浏览器中我可以看到 6.0.0.0 和 12.0.0.0。

如您所见,6.0.0.0 和 12.0.0.0 都存在。6.0.0.0 位于 SDK 内的 C:-drive 上。

我试图删除该文件。我的项目疯了。然后我用我的项目中的 12.0.0.0 替换了该文件。这给了我组件不匹配的错误。

我终于把旧的 .dll 复制回来了。又有点卡住了。

有任何想法吗?

zor*_*rci 5

好的,我修好了。

我的 .csproj 文件中有 2 个对 Newtonsoft.Json 的引用。一个指向包......\xxx.12.0.3,一个指向包......\xxx.12.0.2。

它们都高于 6.0.0.0,这是我得到的错误。所以我忽略了他们。

但实际上,在我的项目中,我只有 12.0.3 文件夹而没有 12.0.2 文件夹。所以参考不起作用,VS试图找到另一个地方看。

我想它环顾四周,也许使用 GAC,但最终它最终在我的本地驱动器中的一个 Azure SDK 中找到了 Newtonsoft.Json 6.0.0.0。这就是问题所在。

我从我的 .csproj 中删除了 12.0.2 引用,最后它起作用了。