Как я могу исправить конфликты версий сборки с 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".




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



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


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



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

740   8  

8 ответов:

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

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

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

чтобы решить эту проблему, после обновления WebApi я открыл инструменты > Диспетчер пакетов NuGet > консоль 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. Проверьте веб.конфигурация после перенаправления сборки. Создайте его, если он не существует.

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.Конфигурация, скорее всего, исправление.

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

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

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

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

Comments

    Ничего не найдено.