Конфликт Ассамблеи Newtonsoft.Json

Я использую Netonsoft.Json в своем проекте. Он отлично работает, пока я не начну интегрировать SDK Paypal в свой проект. Мой код выглядит следующим образом.

         String AccessToken =
  new PayPal.OAuthTokenCredential("", "").GetAccessToken(); ---->>>> This Line Throwing An Error
            PayPal.Api.Payments.Address add = new PayPal.Api.Payments.Address();
            add.city = TextBoxCity.Text;
            add.line1 = TextBoxAddress.Text;
            add.phone = TextBoxPhoneNumber.Text;
            add.postal_code = TextBoxZipcode.Text;
            add.state = TextBoxState.Text;
            PayPal.Api.Payments.CreditCard cc = new PayPal.Api.Payments.CreditCard();
            cc.number = TextBoxCreditCardNumber.Text;
            cc.first_name = TextBoxFirstName.Text;
            cc.last_name = TextBoxLastName.Text;
            cc.expire_month = Convert.ToInt16(TextBoxExpiryMonth.Text);
            cc.expire_year = Convert.ToInt16(TextBoxExpiryYear.Text);
            cc.cvv2 = TextBoxCVVNumber.Text;
            cc.billing_address = add;
            cc.Create(AccessToken);

и я получаю ошибку, как показано ниже

       System.IO.FileLoadException: Could not load file or assembly 'Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Я ищу в Интернете и нашел какое-то решение для изменения файла конфигурации. SO Я меняю свой файл конфигурации ниже

        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
     <bindingRedirect oldVersion="0.0.0.0-3.5.0.0" newVersion="4.5.0.0" />
  </dependentAssembly>
</assemblyBinding>

Я также занимаюсь сборочными свойствами, такими как Copy Local, Specific Version, но ничто не помогает мне решить эту проблему. Как я могу разрешить конфликт сборки?

Ответ 1

У меня была такая же проблема, и я решил ее, обновив Newtonsoft.Json до последней версии, используя

Update-Package Newtonsoft.Json

а затем перейдите в Web.config и добавьте:

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"/>
    <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="5.0.8"/>
</dependentAssembly>

Ответ 2

+1 для zbarrier для его решения. Вот почему это сработало...

+1 к zbarrier за его ответ, который помог мне решить мою проблему. Справки по сборке хуже всего... поэтому я решил опубликовать сделанные мной шаги, а также некоторые вещи, которые я узнал, и, надеюсь, это помогает:


  • FAILED ATTEMPT: Вставьте следующие строки в мой web.config:

    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"/>
            <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="5.0.8"/>
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    

    ^^^^^ НЕ РАБОТАЕТ


  1. РЕШЕНИЕ: Переместиться на ~/Bin/Newtonsoft.Json.dll и открыть файл в Visual Studio. По умолчанию в интерфейсе для файла отображается папка названный в честь сборки - я дважды щелкнул его, чтобы развернуть, и в конце концов увидел это: assembly-file interface Затем я дважды щелкнул на значке 1 [Neutral], который привел меня к сборке, здесь: assembly-file information

    Строка с надписью Assembly Version - это то, что вам нужно будет ввести в атрибут newVersion тега <bindingRedirect>. Так что я взял раздел I, вставленный (на первом шаге), и изменить "5.0.8" на "6.0.0.0". Мой новый раздел <runtime> выглядит следующим образом:

      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"/>
            <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="6.0.0.0"/>
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    

    ^^^^^ ЭТО РАБОТАЕТ!! Наконец-то...


Другие примечания в случае, если кто-то все еще запутался:

  • тег <runtime> находится в теге <configuration></configuration> в web.config. Раздел, показанный выше, был вставлен непосредственно под открывающим тегом моего раздела web.config <configuration>.
  • Атрибут xmlns представляет собой соответствующее пространство имен XML. Это используется разработчиками сборки, чтобы избежать проблем с противоречивые метки. В этом случае вы должны чувствовать себя в безопасности, используя xmlns="schemas-microsoft-com:asm.v1", перечисленных выше.
  • вы можете изменить атрибут oldVersion для перенаправления дополнительных версии сборки. Например, я, вероятно, больше похож на ответ zbarrier.
  • publicKeyToken - еще один атрибут, который в значительной степени когда дело доходит до Newtonsoft.Json. PublicKeyToken - это просто сокращенная версия открытого ключа - во многом как заголовок книга - и в этом случае на самом деле не меняется. Если вы когда-нибудь захотите знайте открытый ключ для сборки, просто откройте Developer Command Prompt, который можно найти в меню "Пуск", затем используйте командную строку, чтобы перейти к расположение файла сборки (в данном случае ~\Bin\) и запустить команда sn -T assembly_file_name. Таким образом, в этом случае команда была sn -T Newtonsoft.Json.dll. Вы должны получить ответ вроде это: sn command response Как вы можете видеть, публикация Newtonsoft ключ (30ad4fe6b2a6aeed) находится прямо в конце.

Ответ 3

Я столкнулся с той же проблемой для сборки версии 6.0.1. Я вставлял следующие строки в web.config по указанию Гарольда:

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"/>
    <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="5.0.8"/>
</dependentAssembly>

Затем я удалил ссылку на проект Newtonsoft.Json и удалил ссылку на Newtonsoft.Json в файле packages.config.

Я открыл Nuget Manager и переустановил Newtonsoft.Json.

Установка изменила настройки web.config на следующие и все работало нормально:

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

Ответ 4

Сначала я подумал, что мой случай был тем же самым старым ссылкой на сборку... удалил, переустановил, принудительно установил, перестроил, добавил сборку перенаправления... и т.д.

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

В моем случае мой код терпел неудачу, когда я вызвал метод HttpClient.PostAsJsonAsync(requestURI, T). Ошибка в Assembly Reference отбросила меня, так как у моего решения было несколько проектов, и в некоторых проектах использовалась старая версия... закончилось много времени тратить, пока...

Мое решение:

  • Удалено существующее System.Net.Http.Formatting из моих ссылок
  • Установлен пакет установки Microsoft.AspNet.WebApi.Client - который установлен необходимый Http.Formatting.

После установки PostAsJsonAsync() работал как ожидалось!

Надеюсь, это избавит меня от тех, кого я потерял, ища решение!

Ответ 5

У меня возникла такая же проблема: я установил Newtonsoft.Json v9.0.1, sandcastle останавливает сборку, отображающую ту же ошибку, но с разницей в версии: "Не удалось загрузить файл или сборку" Newtonsoft.Json, Version = 6.0.0.0 ",

что сработало: найти/создать проект с помощью newtonsoft.json с версией, которую SandCastle запрашивает, добавить файл "Newtonsoft.Json.dll" в качестве ссылки на проект SC, который затем будет создан. (вы можете найти dll в папке bin проекта)