Не удалось загрузить файл или сборку 'Newtonsoft.Json, версия =4.5.0.0, культура = нейтральная, PublicKeyToken=30ad4fe6b2a6aeed'
Я получаю ошибку
System.IO.FileLoadException: не удалось загрузить файл или сборку 'Newtonsoft.Json, версия =4.5.0.0, культура = нейтральная, PublicKeyToken=30ad4fe6b2a6aeed' или одна из ее зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)
для моей сборки CI
Решение, которое я попробовал
<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>
Это тоже не сработало
47 ответов
В консоли диспетчера пакетов выполните: Update-Package –reinstall Newtonsoft.Json
,
ОБНОВИТЬ
Первоначально я разместил это как комментарий, но, как предложил @OwenBlacker, я просто оставлю это здесь:
Если после этого вы по-прежнему получаете сообщение об ошибке, то, в конечном итоге, у меня сработало то, что я удалил <dependentAssembly>
раздел из моего .config
файл. Переустановка возвращает его, если его там нет, и, очевидно, вам нужно удалить его. Пока не будет нормального решения в самом пакете, боюсь, этот шаг вручную является обязательным.
Примечание: пожалуйста, прочитайте комментарии ниже, прежде чем делать это.
В соответствии с комментарием Рене, приведенным ниже, БУДЬТЕ ВНИМАТЕЛЬНЫ, что команда, опубликованная в ответе, переустанавливает пакет в каждом проекте вашего решения. Так что, если вы используете пакет Newtonsoft.Json в нескольких проектах и, возможно, используете разные версии, простое выполнение вышеуказанной команды может иметь нежелательные последствия.
Всем, у кого есть проблемы с версией Newtonsoft.Json v4.5, попробуйте использовать это в 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>
ВАЖНО: убедитесь, что configuration
тэг вашего конфигурационного файла не имеет атрибута пространства имен (как предлагается в /questions/33312434/obyazatelnaya-problema-perenapravleniya-vnet/33312448#33312448). Иначе, assemblyBinding
теги будут игнорироваться.
Ключевым моментом является ссылка на правильную версию в вашем конфигурационном файле.
шаги;
1 - посмотрите, какая версия вашего Newtonsoft.Json.dll в свойстве ссылки на проект, какая версия в папке вашего пакета (например, у меня 7.0.1, а эталонная версия 7.0.0.0)
2 - посмотрите на то, что проект ожидает от вас в исключении (у меня 6.0.0.0)
3- Добавьте зависимую сборку в ваш конфигурационный файл, как и должно быть..
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0"/>
</dependentAssembly>
Мне не повезло ни с одним из представленных здесь решений (удаление, переустановка, удаление ссылок, создание bindingRedirects и т. Д.). Мне пришлось вернуться к старой версии Newtonsoft. Версия 5.0.6 работала и раньше, поэтому я попробовал ее. Мне пришлось ввести эти две команды в консоли пакетов:
uninstall-package newtonsoft.json -force
install-package newtonsoft.json -version "5.0.6"
-force
Параметр в первой команде необходим для принудительного удаления. Зависимости с другими сборками предотвращают удаление без него.
Я исправил проблему с добавлением этого перенаправления привязки в мой файл.config:
<runtime>
. . .
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
culture="neutral" />
<bindingRedirect oldVersion="4.5.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Сообщение об ошибке жалуется на то, что не найдена версия 4.5.0.0, текущая версия Newtonsoft.Json - 6.0.0.0, поэтому перенаправление должно перейти с 4.5 на 6.0, а не наоборот.
Я потратил пару дней, пытаясь решить эту неприятную проблему. Я перепробовал почти все, что можно найти в Интернете. Наконец, я обнаружил, что эта ошибка может быть вызвана (как в моем случае) различными целевыми версиями проекта.Net (4.5 и 4.5.1) в одном решении. Шаги ниже исправили это для меня:
- Дважды проверьте.Net-версию каждого проекта, который входит в ваше решение. Просто щелкните правой кнопкой мыши на проекте и перейдите к
Properties
,
Если возможно, установите одинаковую версию.Net для всех проектов. Если не по крайней мере, попробуйте изменить проект запуска (для меня это был тот, который вызывает проблемы).
Удалить все
Newtonsoft.Json
пакеты из раствора.uninstall-package newtonsoft.json -force
Обновить все
Newtonsoft.Json
версии во всехpackages.config
файлы вроде<package id="Newtonsoft.Json" version="7.0.1" targetFramework="net451" />
Переустановка
Newtonsoft.Json
из "Консоли диспетчера пакетов" с:install-package newtonsoft.json
Восстановить решение
(Необязательно) 7. Если вы изменили проект автозагрузки, верните его снова
Я думаю, что вы указываете на неправильную цель, измените ее на 4,5 вместо 6,0
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="4.5.0.0" />
</dependentAssembly>
Это должно работать.
uninstall-package newtonsoft.json -force
install-package newtonsoft.json
Сделал трюк для меня:)
Если вы используете несколько проектов в одном решении и в одной библиотеке проверьте, все ли проекты имеют одинаковую версию Newtonsoft.Json
Удалите сборку Newtonsoft.Json из ссылки на проект и добавьте ее снова. Вы, вероятно, удалили или заменили dll случайно.
Я писал клиент службы WebApi REST, поэтому для меня эта ошибка была вызвана добавлением ссылок на System.Net.Http
а также System.Net.Http.Formatting
сборки вручную через Добавить ссылку, когда я должен был добавить Microsoft.AspNet.WebApi.Client
пакет через NuGet. Смотрите также этот ответ на другой вопрос.
У вас есть 2 разные версии библиотеки JSON.NET в вашем решении. Чтобы решить эту проблему, вы должны обновить их до последней версии. Следуй этим шагам:
1-Открыть обозреватель решений. 2-Щелкните правой кнопкой мыши на имени решения. 3-Выберите Управление пакетами Nuget для решения. 4-Выберите обновления в меню. 5-Обновите пакет JSON.NET.
Это решит вашу проблему.
Разверните правильную версию на машине CI
Это говорит о том, что загрузчик сборки нашел другую версию Newtonsoft.Json
сборка, которая не соответствует ссылке, которую вы создали в своем проекте. Чтобы правильно загрузить сборку, вы должны либо развернуть сборку рядом с вашим скомпилированным кодом, либо установить правильную версию сборки на конечном компьютере (то есть в GAC).
Альтернатива: убедитесь, что конфигурация находится в правильном файле
Если вы хотите сохранить текущее решение и загрузить сборку с другой версией, убедитесь, что вы указали правильную конфигурацию .config
файл. Помните, что нет xpto.dll.config
DLL-библиотека, загружаемая приложением, всегда использует файл конфигурации запущенного приложения.
Обычно добавление редиректа связывания должно решить эту проблему, но у меня это не сработало. После нескольких часов удара головой о стену я понял, что в моем файле web.config есть атрибут xmlns, вызывающий проблемы. После удаления атрибута xmlns из узла конфигурации в Web.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-12.0.0.0" newVersion="12.0.0.0" />
</dependentAssembly>
</assemblyBinding>
Закрыть решение.
открыто packages.config
а также *.csproj
с текстовым редактором и удалить любую строку есть Newtonsoft.Json
Пример:<Reference Include="Newtonsoft.Json,Version=9.0.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
</Reference>
Или же<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />
Откройте решение снова и переустановите Newtonsoft.Json Install-Package Newtonsoft.Json
Это работает для меня.
<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="7.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
Работает для меня.... просто поместите версию, которую вы используете в newVersion т.е. (newVersion="7.0.0.0")
Просто проверьте версию свойств Newtonsoft.Json Newtonsoft
Затем вам нужно добавить эту версию в веб-конфигурацию (в моем случае 8.0.0.0).
Вам следует обновить файл web.config на сервере. Когда Nuget устанавливает NewtonSoft, обновите этот файл, включая этот код
<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>
У меня такая же проблема. И я также решил это, выполнив следующие действия: Перейдите в раздел ИНСТРУМЕНТЫ > Диспетчер пакетов NuGet и выберите Консоль диспетчера пакетов. Наконец, выполните следующие две команды:)
- удалить-пакет newtonsoft.json -force
- установочный пакет newtonsoft.json
У нас была та же самая проблема, о которой вы упоминали. Мы используем nunit для запуска тестов через CI, и у нас есть nunit, запускающий файл под названием tests.nunit, в котором описывается список тестовых приспособлений dll для запуска.
Каждый тестовый прибор имел свой собственный файл конфигурации, но при запуске через файл "tests.nunit" перенаправления привязки, похоже, игнорируются. Решением было добавить перенаправления привязки в новый файл конфигурации "tests.config", который был рядом с файлом "tests.nunit".
Переустановка пакета newtonsoft через nuget у меня не сработала. Мне пришлось вручную вызвать JsonConvert.DeserializeObject, чтобы обойти эту проблему
Я изменился
HttpResponseMessage response = await client.GetAsync(url));
response.EnsureSuccessStatusCode();
MyObject data = await response.Content.ReadAsAsync<MyObject>();
За
HttpResponseMessage response = await client.GetAsync(url));
response.EnsureSuccessStatusCode();
string jsonStr = await response.Content.ReadAsStringAsync();
MyObject data = JsonConvert.DeserializeObject<MyObject>(jsonStr);
Я сделал ошибку, добавив файл NewtonSoft .dll для.Net 4.5.
Мой основной проект был 4.5, но когда я добавил дополнительный проект в свое решение, он странным образом добавил его в качестве проекта.Net 2.0... и когда я попытался использовать с ним 4.5ll NewtonSoft, я получил этот "Newtonsoft.Json не найдена "ошибка.
Решение (конечно) состояло в том, чтобы изменить этот новый проект с.Net 2.0 на 4.5.
В моем случае основной проект все еще ссылался на старую версию Newtonsoft.Json, которой больше не было в проекте (показано желтым восклицательным знаком). Удаление ссылки решило проблему, не было необходимости в bindingRedirect.
У меня была точно такая же проблема с версией 7.0.0.0, и библиотека, вызывающая мою проблему, была https://www.nuget.org/packages/Microsoft.Rest.ClientRuntime/, которая как-то ссылалась на неправильную версию (6.0.0.0) Newtonsoft.json, несмотря на правильное управление зависимостями в nugget (правильная версия newtonsoft.json (7.0.0.0) была установлена).
Я решил это, применив перенаправление выше с 6.0.0.0 до 7.0.0.0 (из Kadir Can) в файле конфигурации:
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0" />
----> Через несколько дней, ничего не меняя, снова возникла та же ошибка. Я установил версию 6.0.0.0 и обновил ее до 7.0.0.0. Теперь она работает нормально.
Я столкнулся с той же ошибкой и боролся с ней часами. У меня был проект веб-API, который использует Newtonsoft.json и другой проект UnitTest для проекта веб-API. Проект модульного тестирования также нуждался в ссылке Newtonsoft.json. Но при добавлении ссылки я получаю вышеуказанное исключение.
Я наконец решил ее, добавив приведенный ниже фрагмент кода в app.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>
Ничто из вышеперечисленного не помогло мне, но на самом деле это исправлено следующим образом:
- Удалите все привязки зависимостей в app.config (из всех файлов app.config в решении)
- Выполните следующую команду из "Консоли диспетчера пакетов"
Get-Project -Все | Надстройка BindingRedirect
- перестраивать
Ссылка: http://blog.myget.org/post/2014/11/27/Could-not-load-file-or-assembly-NuGet-Assembly-Redirects.aspx
Если ошибка исчезает локально и все еще появляется на сервере, решение, которое работает со мной, состоит в том, чтобы удалить папку bin и packages.config и web.config и повторно загрузить эти файлы
Еще одна коварная проблема заключается в том, что перенаправления привязок могут просто молча завершиться сбоем, если элемент имеет неправильную конфигурацию для любых других элементов зависимых сборок.
Убедитесь, что у вас есть только один элемент под каждым элементом.
В некоторых случаях VS генерирует это:
<dependentAssembly>
<assemblyIdentity ...
<assemblyIdentity ...
</dependentAssembly>
Вместо
<dependentAssembly>
<assemblyIdentity ...
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity ...
</dependentAssembly>
Мне потребовалось много времени, чтобы понять, что это проблема!
В моем случае, после загрузки сборки и добавления ссылки на проект, я решил эту проблему, "разблокировав" библиотеку DLL перед добавлением ссылки на проект.
С помощью проводника Windows перейдите в папку DLL, щелкните правой кнопкой мыши DLL и выберите "Свойства". На одной из вкладок вы найдете кнопку "разблокировать", а затем сможете добавить ссылку, и сборка загрузится правильно.