Я создал новый веб-проект ASP.NET MVC 5 в VS 2013 (обновление 1), а затем обновил все пакеты NuGet. Когда я создаю проект, я получаю следующее предупреждение:
предупреждение MSB3243: невозможно разрешить конфликт между «Newtonsoft.Json, Version = 6.0.0.0, Culture = нейтральный, PublicKeyToken = 30ad4fe6b2a6aeed» и «Newtonsoft.Json, Version = 4.5.0.0, Culture = нейтральный, 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>
Именно об этом и говорится в предупреждении.
Как исправить это предупреждение?
Ответы:
Вот шаги, которые я использовал, чтобы исправить предупреждение:
источник
install.ps1
У меня возникла эта проблема, потому что я обновил пакеты, включая Microsoft.AspNet.WebApi, в котором есть ссылка на Newtonsoft.Json 4.5.6, и у меня уже была установлена версия 6. Использовать версию 6 было недостаточно умно.
Чтобы решить эту проблему, после обновления WebApi я открыл Инструменты> Диспетчер пакетов NuGet> Консоль диспетчера Pacakge и запустил:
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>
источник
Если ничего из вышеперечисленного не работает, попробуйте использовать это в 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>
источник
Я обновился с 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 исправила эти адские проблемы с DLL Visual Studio, которые не появляются. Это происходит слишком часто, и прогресс останавливается до тех пор, пока не будет исправлен, часто методом проб и ошибок.
источник
Окончательное решение ошибок перенаправления вашей сборки
Хорошо, надеюсь, это поможет устранить любые (вменяемые) несоответствия в ссылках на сборку ...
Радуйтесь.
источник
Помните, что с перенаправлением привязки
Вы говорите, что старые версии dll находятся между версией 0.0.0.0 и версией 6.0.0.0.
источник
oldVersion
на самом деле это немного неправильное название, вы говорите, что ваша сборка / exe была построена со ссылкой на версию в диапазоне0.0.0.0-6.0.0.0
и что фактически установленная (и предпочтительная) версия - это значение подnewVersion
(старая версия была бы лучше сформулирована как «ожидаемая версия» и новую версию лучше было бы сформулировать как «актуально доступная версия»)Никто не упомянул следующее, что, как я понимаю, является правильным решением:
Перейдите в csproj проекта, в котором установлен nuget, и установите
AutoGEneratedBindingRedirects
дляfalse
.<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
Полная статья в MSDN.
источник
Я обновил свой пакет и даже переустановил его, но все равно получал ту же ошибку, что и упомянутый OP. Я вручную отредактировал указанную dll, выполнив следующие действия.
Я удалил newtonsoft.json.dll из своей ссылки, а затем вручную удалил .dll из директории bin. Затем я вручную скопировал newtonsoft.json.dll из папки пакета nuget в корзину проекта, а затем добавил ссылку, перейдя к файлу .dll.
Теперь мой проект снова строится.
источник
У меня была аналогичная проблема, и я просто хотел опубликовать ответ для других в моей ситуации.
У меня есть решение, в котором запущено веб-приложение ASP.NET с несколькими другими проектами библиотеки классов C #.
Мое веб-приложение ASP.NET не использовало json, но другие проекты, где.
Вот как я это исправил:
Шаг 2 - это, прежде всего, добавление информации о конфигурации для json, которая предполагает, что все проекты используют последнюю версию (6) независимо от того, какая у них версия. Добавление привязки сборки к Web.Config, скорее всего, поможет.
Однако шаг 2 также очистил устаревший код. Оказалось, что мы ранее использовали старую версию (5) json в нашем веб-приложении, и папки NuGet не были удалены, когда ссылка была (я подозреваю: вручную) удалена. Добавив последнюю версию json (6), удалили старые папки (json v5). Это также может быть частью исправления.
источник
Веверке упомянул, что можно отключить генерацию перенаправления привязки, установив для AutoGEneratedBindingRedirects значение false. Не уверен, что это новая вещь с тех пор, как был опубликован этот вопрос, но есть опция «Пропустить применение перенаправления привязки» в Tools / Options / Nuget Packet Manager, которую можно переключать. По умолчанию он выключен, что означает, что будут применяться перенаправления. Однако, если вы это сделаете, вам придется вручную управлять всеми необходимыми перенаправлениями привязки.
источник