Как исправить конфликты версий сборки с JSON.NET после обновления ссылок на пакет NuGet в новом ASP.NET проект MVC 5?

Я создал новый ASP.NET веб-проект MVC 5 в VS 2013 (обновление 1) затем обновил все пакеты NuGet. Когда я создаю проект, я получаю следующее предупреждение:

предупреждение MSB3243: нет способа разрешить конфликт между "Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed " и " Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed".

когда я проверяю интернет.конфигурации, однако, я вижу, что привязка redirect на месте:

  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
  </dependentAssembly>

Это именно то, что советует предупреждение.

Как я могу исправить это предупреждение?

8 ответов


здесь шаги, которые я использовал для исправления предупреждения:

  • выгрузить проект в VS
  • правка .файл csproj
  • поиск всех ссылок на Newtonsoft.Сборки в формате JSON
    • найдено два, один для v6 и один для v5
    • заменить ссылку на v5 на v6
  • перезагрузить проект
  • сборка и уведомление об ошибке ссылки сборки
  • просмотр ссылок и увидеть, что теперь есть два Newtonsoft.формат JSON. Удалите тот, который не удается решить.
  • восстановить - нет предупреждения

У меня была эта проблема, потому что я обновил пакеты, которые включали Microsoft.сеть САШ.WebApi, который имеет ссылку на Newtonsoft.Json 4.5.6 и у меня уже была установлена версия 6. Он не был достаточно умен, чтобы использовать версию 6.

чтобы решить эту проблему, после обновления WebApi я открыл консоль Tools > NuGet Package Manager > Pacakge Manager и запустил:

 Update-Package Newtonsoft.Json

журнал показал, что 6.0.версии x и 4.5.6 были обновлены до последней версии, и все было штраф.

У меня такое чувство, что это всплывет снова.


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

<ItemGroup>
<Reference Include="Newtonsoft.Json">
  <HintPath>..\packages\Newtonsoft.Json.6.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>


Если ничего из вышеперечисленного не работает, попробуйте использовать это в интернете.config или app.config:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
            <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
        </dependentAssembly>
    </assemblyBinding>
</runtime>

окончательное решение для вашей сборки перенаправить ошибки

ладно, надеюсь, это должно помочь решить любой (в здравом уме) несоответствия ссылок на сборку ...

  1. проверяем ошибки.

Surf to the website

  1. проверить web.config после перенаправления сборки. Создайте его, если он не существует.

Existing web.config assembly redirect

  1. щелкните правой кнопкой мыши на ссылку для сборка и выберите Свойства.

Assembly in the Reference list, in the relevant project

  1. проверьте версию (не версию среды выполнения) в таблице свойств. Понял.

Properties table showing Version of assembly

  1. вставить в атрибут newVersion.

web.config assembly redirect with updated newVersion

  1. для удобства измените последнюю часть oldVersion на что-то высокое, круглое и воображаемый.

web.config assembly redirect with updated oldVersion

радуемся.


помните, что с перенаправлением привязки

oldVersion= "0.0.0.0-6.0.0.0"

вы говорите, что старые версии dll находятся между версией 0.0.0.0 и версией 6.0.0.0.


У меня была аналогичная проблема, и я просто хотел опубликовать ответ для других в моей ситуации.

У меня есть решение под управлением ASP.NET веб-приложение с несколькими другими проектами lib класса C#.

мой ASP.NET веб-приложение не использовало json, но другие проекты, где.

вот как я это исправил:

  1. я убедился, что все проекты, в которых используется последняя версия (6) , используют обновление NuGet для всех проектов, использующих любую версию json - это не исправить проблему
  2. я добавил json в веб-приложение с помощью NuGet-это исправило проблему (позвольте мне погрузиться в почему):

Шаг 2 был прежде всего добавлением информации о конфигурации для json, которые предполагают, что все проекты используют последнюю версию (6) независимо от того, какая версия у них есть. Добавление привязки сборки к Web.Config, скорее всего, исправление.

однако Шаг 2 также очистил устаревший код som. Оказалось, мы раньше использовали старый версия (5) json в нашем веб-приложении и папки NuGet не были удалены, когда ссылка была (я подозреваю: вручную) удалена. Добавив последний json (6), удалил старые папки (json v5). Это тоже может быть частью исправления.


я обновил свой пакет и даже переустановил его - но я все еще получал ту же ошибку, что и упомянутая OP. Я вручную отредактировал указанную dll, выполнив следующее.

Я удалил newtonsoft.формат JSON.dll из моей ссылки, затем вручную удалил .dll из бин directoy. Затем я вручную скопировал newtonsoft.формат JSON.dll из папки пакета nuget в корзину проекта, а затем добавил ссылку, перейдя к .DLL-файл.

теперь мой проект снова строит.