Newtonsoft.Сборка В JSON Конфликта

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

         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's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Я ищу в интернете и нашел решение для изменения файла конфигурации. Поэтому я меняю свой файл конфигурации, как показано ниже

        <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>

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

5 ответов


у меня была такая же проблема, и я решил ее, обновив 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>

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

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


  1. НЕУДАЧНАЯ ПОПЫТКА: вставил следующие строки в my 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 это то, что вам нужно ввести в на <bindingRedirect> tag. Поэтому я взял раздел обклеил (на один шаг) и изменить "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>
    

    ^^^ ^ ^^ ЭТО СРАБОТАЛО!! В конечном счете...


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

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

я столкнулся с той же проблемой для сборки версии 6.0.1. Я вставил в паутину следующие строки.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 в пакетах.конфигурационный файл.

Я открыл менеджер Nuget и переустановил Newtonsoft.формат JSON.

установка изменила интернет.настройки конфигурации следующие и все работает нормально:

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

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

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

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

мое решение:

  • удалены существующей системы.Чистая.Протоколу HTTP.Форматирование из моих ссылок
  • установлен установочный пакет Microsoft.сеть САШ.Веб-API.Клиента, который установлен необходимый Http.Форматирование.

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

надеюсь, это сэкономит кому - то время, которое я потерял в поисках решения!


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

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