Не удалось загрузить файл или сборку "Newtonsoft.Json, Version = 7.0.0.0, Culture = neutral, 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, Version = 7.0.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed 'или одна из его зависимостей. установленное определение манифеста сборки не соответствует сборке Справка. (Исключение из HRESULT: 0x80131040) Имя файла: 'Newtonsoft.Json, Version = 7.0.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed 'at ОтправитьGrid.Helpers.Mail.Mail.Get() at BaseServices.EmailService.SendAsync(сообщение электронной почты) в MyFolder\BaseServices\EmailService.cs: строка 39

=== Информация о состоянии предварительной привязки === LOG: DisplayName = Newtonsoft.Json, Version = 7.0.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed (Fully-specific) LOG: Appbase = file:///MyFolder/Web/LOG: начальная 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, Version = 7.0.0.0, Культура = нейтральная, PublicKeyToken = 30ad4fe6b2a6aeed LOG: Попытка загрузка нового URL-адреса file:///C:/Users/computer/AppData/Local/Temp/Temporary ASP.NET Файлы/корень/ef9cacdf/e639667a/Newtonsoft.Json.DLL. LOG: Попытка загрузка нового URL-адреса file:///C:/Users/computer/AppData/Local/Temp/Temporary ASP.NET Файлы/корень/ef9cacdf/e639667a/Newtonsoft.Json/Newtonsoft.Json.DLL. ЖУРНАЛ: Попытка загрузки нового URL-адреса файл:///MyFolder/Web/bin/Newtonsoft.Json.DLL. WRN: сравнение имя сборки привело к несоответствию: Основная версия ERR: не удалось полная настройка сборки (hr = 0x80131040). Исследование прекращено.

Ответ 1

В вашем решении есть две разные версии библиотеки JSON.NET. Чтобы решить эту проблему, вы должны обновить их до последней версии. Выполните следующие действия:

  • Открытый исследовательский раствор
  • Щелкните правой кнопкой мыши по имени решения
  • Выберите "Управление пакетами Nuget для решения"
  • Выберите "Обновления" в меню
  • Обновление пакета JSON.NET

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

Ответ 2

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

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