Не удалось загрузить файл или сборку '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 в вашем решении. Чтобы решить эту проблему, вы должны обновить их до последней версии. Следуй этим шагам:
- Открытый обозреватель решений
- Щелкните правой кнопкой мыши по названию решения.
- Выберите Управление пакетами Nuget для решения
- Выберите Обновления из меню
- Обновление пакета 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 в вашем проекте установки, убедитесь, что вы знаете, какую из них нужно удалить.
Что сбивает с толку, так это то, что после обновления библиотеки в режиме отладки решение продолжает работать без инцидентов. Только когда я пошел на тестовое развертывание, я столкнулся с проблемой.
Более того, обновление, как следует из первого ответа, не было решением для меня.