Как исправить конфликты версий сборки с 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>
окончательное решение для вашей сборки перенаправить ошибки
ладно, надеюсь, это должно помочь решить любой (в здравом уме) несоответствия ссылок на сборку ...
- проверяем ошибки.
- проверить web.config после перенаправления сборки. Создайте его, если он не существует.
- щелкните правой кнопкой мыши на ссылку для сборка и выберите Свойства.
- проверьте версию (не версию среды выполнения) в таблице свойств. Понял.
- вставить в атрибут newVersion.
- для удобства измените последнюю часть 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, но другие проекты, где.
вот как я это исправил:
- я убедился, что все проекты, в которых используется последняя версия (6) , используют обновление NuGet для всех проектов, использующих любую версию json - это не исправить проблему
- я добавил 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-файл.
теперь мой проект снова строит.