Конфликт Newtonsoft. Json 6.0.0.0 и 12.0.0.0 в веб-приложении с Web Api, C# - PullRequest
2 голосов
/ 19 февраля 2020

Я запустил новое веб-приложение в Visual Studio 2019. Я добавил веб-интерфейс. Вскоре после или в то же время (не помню) я начал получать предупреждения, подобные этому:

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.

Я заметил, но ничего не сделал, так как решил подождать, пока это не доставило мне проблем.

И это сейчас ...

Я собираюсь использовать объект JSon, но при написании этого:

JObject jObject = JObject.Parse(result);

Компилятор выдает мне эту ошибку:

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'

Я искал в Интернете, и мои выводы таковы:

  • Похоже, что Microsoft.As pNet .WebApi.Client это единственный установленный пакет, который зависит от Newtonsoft. Json (> = 6.0.4)
  • Я установил Newtonsoft. Json (12.0.3)
  • In Solution Проводник. В списке литературы у меня есть только 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 разных ссылки в 3 разных группах предметов:
    • Один для версии 12.0.0.0
    • Один для v. 12.0.2
    • И один для v. 12.0.3
  • Я попытался удалить пакет Newtonsoft. Json, но не допускается, так как другие пакеты зависят от этого.
  • Я запустил эту команду: Update-Package Newtonsoft. Json в консоли диспетчера пакетов, которая сказала мне, что нет новых обновления были доступны.

И теперь у меня закончились идеи. Я застрял. Кто-нибудь знает, что делать?

**** Новое обновление **** Я нашел 6.0.0.0. Пожалуйста, взгляните на картинку:

Here in resources I double clicked the Newtonsoft.Json reference and in the object browser I can see both 6.0.0.0 and 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 находится где-то на моем C: - диске внутри SDK.

Я попытался удалить файл. Мой проект сошел с ума. Затем я заменил этот файл на 12.0.0.0 из моего проекта. Это дало мне ошибку, что сборки не совпадали.

Я наконец скопировал старый .dll обратно. И опять немного застрял.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

Хорошо, я исправил это.

В моем файле .csproj было 2 ссылки на Newtonsoft. Json. Один указывал на пакеты ...... \ xxx.12.0.3, а другой - на пакеты ...... \ xxx.12.0.2.

Оба они были выше 6.0.0.0, что было ошибка, которую я получил. Поэтому я проигнорировал их.

Но, на самом деле, в моем проекте у меня была только папка 12.0.3 и папка 12.0.2. Таким образом, ссылка не сработала, и VS попытался найти другое место для поиска.

Я думаю, что он смотрит вокруг, возможно, с использованием GA C, но в конце концов он оказался в глубине моего локального диска в одном Azure SDK и нашел Newtonsoft. Json 6.0.0.0. И это была проблема.

Я удалил ссылку 12.0.2 из моего .csproj, и, наконец, это сработало.

1 голос
/ 19 февраля 2020

Проблема обычно возникает в двух разных проектах, которые используют разные версии одной и той же библиотеки.

Оба этих проекта затем ссылаются на другой, и предупреждение эффективно предупреждает вас о том, что что-то подобное может произойти.

Go до решения и щелкните правой кнопкой мыши - управляйте пакетами nuget.

Go на вкладке консолидации. Проверьте, что newtonsoft есть. Если это так, установите один и тот же пакет для всех проектов.

Если это не сработает, проверьте свои проекты на наличие добавленных ссылок, которые не исходят от nuget, и удалите их тоже.

...