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

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

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

Однако, когда я проверяю web.config, я вижу, что перенаправление привязки на месте:

  <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>

Именно это предупреждение предупреждает.

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

Ответ 1

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

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

Ответ 2

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

Чтобы решить эту проблему, после обновления WebApi я открыл Диспетчер пакетов > Диспетчер пакетов NuGet > Консоль управления Pacakge и выполнил:

 Update-Package Newtonsoft.Json

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

У меня такое чувство, что это снова придет.

Ответ 3

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

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

Ответ 4

Если ни одно из указанных выше не работает, попробуйте использовать это в файле web.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>

Ответ 5

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

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

  • Проверьте ошибку.

Surf to the website

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

Существующее перенаправление сборки web.config

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

Сборка в списке ссылок в соответствующем проекте

  1. Проверьте версию (не версию Runtime) в таблице "Свойства". Скопируйте это.

Таблица свойств, показывающая версию сборки

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

перенаправление сборки web.config с обновленной версией newVersion

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

перенаправление сборки web.config с обновленным oldVersion

Радуйтесь.

Ответ 6

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

oldVersion = "0.0.0.0-6.0.0.0"

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

Ответ 7

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

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

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

Вот как я его исправил:

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

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

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

Ответ 8

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

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

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

Ответ 9

Никто не упомянул следующее, что в моем понимании является правильным решением:

Перейдите в csproj проекта, в котором установлен AutoGEneratedBindingRedirects, и установите для AutoGEneratedBindingRedirects значение false.

<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>

Полная статья в MSDN.

Ответ 10

Я обновил с Newtonsoft.Json 11.0.1 до 12.0.2. Открыв файл проекта в Notepad++, я обнаружил оба

<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
      <HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
    </Reference>

а также

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

Я удалил ItemGroup, включив ссылку с путем подсказки до версии 11.0.1.

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

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