Не удалось загрузить файл или сборку 'Newtonsoft.Json, версия =7.0.0.0, культура = нейтральная, PublicKeyToken=30ad4fe6b2a6aeed' или одна из ее зависимостей

Эта ошибка сводит меня с ума.

Я установил пакет SendGrid NuGet в одну из моих библиотек классов с именем BaseServices, которая зависит от Newtonsoft.Json v7.0.1, поэтому он устанавливает его в папку с моими пакетами и ссылается на него.

В библиотеке классов у меня есть это перенаправление привязки:

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
</dependentAssembly>

В файле web.config приложения ASP.NET MVC, то есть клиентского приложения, использующего мою библиотеку классов, у меня есть перенаправление привязки сборки для версий менее v6, чтобы указывать на v6 библиотеки Newtonsoft.Json, например так:

<dependentAssembly>
 <assemblyIdentity name="Newtonsoft.Json" culture="neutral"
              publicKeyToken="30ad4fe6b2a6aeed" />
  <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>

Когда я запускаю код отправки электронной почты, который находится в библиотеке BaseServices, я получаю эту ошибку:

Поток 0x1a4c вышел с кодом 0 (0x0). System.IO.FileLoadException: не удалось загрузить файл или сборку 'Newtonsoft.Json, версия =7.0.0.0, культура = нейтральная, PublicKeyToken=30ad4fe6b2a6aeed' или одна из ее зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040) Имя файла: 'Newtonsoft.Json, версия =7.0.0.0, культура = нейтральная, PublicKeyToken=30ad4fe6b2a6aeed' в SendGrid.Helpers.Mail.Mail.Get() на BaseServices.EmailService.SendAsync(EmailMessage) в MyFolder\BaseServices\EmailService.cs: строка 39

=== Информация о состоянии предварительной привязки === LOG: DisplayName = Newtonsoft.Json, версия =7.0.0.0, культура = нейтральная, PublicKeyToken=30ad4fe6b2a6aeed (полностью определенная) LOG: Appbase = file:///MyFolder/Web/ LOG: Initial PrivatePath = MyFolder\Web\bin Вызывающая сборка: SendGrid, версия =7.0.3.0, культура = нейтральная, PublicKeyToken=4f047e93159395ca. === LOG: эта привязка начинается в контексте загрузки по умолчанию. LOG: использование файла конфигурации приложения: MyFolder\Web\web.config LOG: использование файла конфигурации хоста: C:\Users\computer\Documents\IISExpress\config\aspnet.config LOG: использование файла конфигурации компьютера из C:\Windows\Microsoft.NET\Framework\v4.0.30319\ Config\machine.config. LOG: ссылка после политики: Newtonsoft.Json, версия =7.0.0.0, культура = нейтральная, PublicKeyToken=30ad4fe6b2a6aeed LOG: попытка загрузки нового файла URL:///C:/Users/computer/AppData/Local/Temp/Temporary Файлы ASP.NET /root/ef9cacdf/e639667a/Newtonsoft.Json.DLL. LOG: Попытка загрузки нового файла URL: /// C: / Users / computer / AppData / Local / Temp / Временные файлы ASP.NET /root/ef9cacdf/e639667a/Newtonsoft.Json/Newtonsoft.Json.DLL. LOG: Попытка загрузки нового файла URL:///MyFolder/Web/bin/Newtonsoft.Json.DLL. WRN: сравнение имени сборки привело к несоответствию: Major Version ERR: Не удалось завершить настройку сборки (hr = 0x80131040). Зондирование прекращено.

3 ответа

Решение

У вас есть 2 разные версии библиотеки JSON.NET в вашем решении. Чтобы решить эту проблему, вы должны обновить их до последней версии. Следуй этим шагам:

  1. Открытый обозреватель решений
  2. Щелкните правой кнопкой мыши по названию решения.
  3. Выберите Управление пакетами Nuget для решения
  4. Выберите Обновления из меню
  5. Обновление пакета JSON.NET

Это решит вашу проблему.

У меня такое сумасшествие случалось со мной совсем немного. Вы должны убедиться, что версия сборки Newtonsoft.Json совместима в следующих местах:

  • Ссылки на проект (версия dll)
  • Web.config
  • Packages.config

У меня было такое же сообщение об исключении, и я наткнулся на эту тему. Надеюсь, следующее поможет кому-то еще.

Мое решение содержит несколько проектов. Один из этих проектов использует Microsoft.AspNet.WebApi.Client. Одной из ее зависимостей является библиотека Newtsonsoft.Json.

Однако версия библиотеки, которую использует Microsoft.AspNet.WebApi.Client, - версия 6.0.

Проблема в том, что в какой-то момент разработчик получает информацию об обновлениях. Поэтому мы обновляем библиотеку JSON. Все хорошо, верно?

Затем мы добавляем проект установки, который создает установщик.msi. Аааа... в этом.msi мы теперь видим две версии библиотеки JSON. А? Как это случилось. Конечно, мы удаляем старую.

Затем, в какой-то момент, во время тестирования, мы получаем сообщение об исключении для версии 6.0. Но теперь, когда мы проходим файлы.config и т. Д., Мы видим ссылки на версию 11.0+.

Я видел здесь различные исправления из разных тем. Некоторые говорят о принудительном удалении библиотеки и удалении ссылок XML в этих файлах.config.

Для меня сработало удаление Microsoft.AspNet.WebApi.Client вместе с библиотекой JSON и переустановка Microsoft.AspNet.WebApi.Client. Последний возвращает свою надлежащую зависимость.

Урок: если вы видите несколько версий.dll в вашем проекте установки, убедитесь, что вы знаете, какую из них нужно удалить.

Что сбивает с толку, так это то, что после обновления библиотеки в режиме отладки решение продолжает работать без инцидентов. Только когда я пошел на тестовое развертывание, я столкнулся с проблемой.

Более того, обновление, как следует из первого ответа, не было решением для меня.

Другие вопросы по тегам