Конфликт Ассамблеи 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>
^^^^^ НЕ РАБОТАЕТ
-
РЕШЕНИЕ: Переместиться на ~/Bin/Newtonsoft.Json.dll
и открыть файл в
Visual Studio. По умолчанию в интерфейсе для файла отображается папка
названный в честь сборки - я дважды щелкнул его, чтобы развернуть, и
в конце концов увидел это:
Затем я дважды щелкнул
на значке 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. Вы должны получить ответ вроде
это:
Как вы можете видеть, публикация 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 проекта)