Не удалось загрузить файл или сборку "Newtonsoft.Json, Version = 4.5.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed"
Я получаю сообщение об ошибке
System.IO.FileLoadException: не удалось загрузить файл или сборку 'Newtonsoft.Json, Version = 4.5.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed 'или одна из его зависимостей. установленное определение манифеста сборки не соответствует сборке Справка. (Исключение из HRESULT: 0x80131040)
для моей сборки CI
Решение, которое я пробовал
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
Он также не работал
Ответы
Ответ 1
В консоли менеджера пакетов выполните: Update-Package –reinstall Newtonsoft.Json
.
UPDATE
Я изначально разместил это как комментарий, но как @OwenBlacker предложил, я просто поставлю его здесь:
Если вы все равно получите сообщение об ошибке после этого, то в конечном итоге мне удалось удалить раздел Json.Net <dependentAssembly>
из моего файла .config
. Переустановка возвращает его, если его нет, и, видимо, вам нужно его удалить. Пока не будет нормального решения в самом пакете, я боюсь, что этот ручной шаг является обязательным.
Примечание. Пожалуйста, прочитайте комментарии ниже, прежде чем делать это.
В соответствии с комментарием René ниже BE AWARE, что команда, отправленная в ответ, переустановит пакет в каждом проекте вашего решения. Поэтому, если вы используете пакет Newtonsoft.Json в нескольких проектах и, возможно, используете разные версии, просто выполнение вышеуказанной команды может иметь нежелательные последствия.
Ответ 2
Для всех, у кого проблемы с версией Newtonsoft.Json v4.5, попробуйте использовать это в web.config или app.config:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json"
publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
ВАЖНО. Убедитесь, что тег configuration
вашего конфигурационного файла не имеет атрибута пространства имен (как предлагается в fooobar.com/questions/25420/...). В противном случае теги assemblyBinding
будут игнорироваться.
Ответ 3
Это единственное решение, Ключевой момент - это ссылка на правую версию в вашем файле конфигурации.
Шаги;
1- посмотрите, какая версия вашего Newtonsoft.Json.dll в свойстве ссылки на проект, какая версия в вашей папке пакета (например, моя 7.0.1, а эталонная версия 7.0.0.0)
2 Посмотрите, что ожидает от вас проект в исключении (мой 6.0.0.0)
3- Добавить зависимую сборку в ваш файл конфигурации, как и должно быть.
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0"/>
</dependentAssembly>
Ответ 4
Мне не повезло ни с одним из представленных здесь решений (удаление, переустановка, удаление ссылок, создание bindingRedirects и т.д.) Мне пришлось вернуться к старой версии Newtonsoft. Версия 5.0.6 работала раньше, поэтому я попробовал это. Мне пришлось ввести эти две команды в консоли пакета:
uninstall-package newtonsoft.json -force
install-package newtonsoft.json -version "5.0.6"
Параметр -force
в первой команде требуется для принудительного удаления. Зависимости от других сборок предотвращают удаление без него.
Ответ 5
Я исправил проблему с добавлением этого перенаправления связывания в мой файл .config:
<runtime>
. . .
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
culture="neutral" />
<bindingRedirect oldVersion="4.5.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Сообщение об ошибке жалуется на то, что не найдет версию 4.5.0.0, текущая версия Newtonsoft.Json - 6.0.0.0, поэтому перенаправление должно идти от 4.5 до 6.0, а не наоборот
Ответ 6
Я думаю, что вы указываете на неверную цель, измените ее на 4.5 вместо 6.0
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="4.5.0.0" />
</dependentAssembly>
Это должно работать.
Ответ 7
Я провел пару дней, пытаясь решить эту неприятную проблему. Я пробовал почти все, что можно найти в Интернете. Наконец, я обнаружил, что эта ошибка может быть вызвана (как и в моем случае) различными целевыми версиями проекта .Net(4.5 и 4.5.1) в одном решении. Шаги для него исправили:
- Дважды проверьте версию .Net каждого проекта, который в вашем решении. Просто щелкните правой кнопкой мыши по проекту и перейдите к
Properties
.
![введите описание изображения здесь]()
-
Если возможно, установите ту же версию .Net для всех проектов. Если вы хотя бы не пытаетесь изменить проект запуска (для меня это вызвало проблемы).
-
Удалите все пакеты Newtonsoft.Json
из решения.
uninstall-package newtonsoft.json -force
-
Обновите все версии Newtonsoft.Json
во всех файлах packages.config
, например
<package id="Newtonsoft.Json" version="7.0.1" targetFramework="net451" />
-
Переустановите Newtonsoft.Json
из "Консоль диспетчера пакетов" с помощью:
install-package newtonsoft.json
-
Восстановить решение
(необязательно) 7. Если вы изменили проект запуска, верните его снова
Ответ 8
Удалите сборку Newtonsoft.Json из ссылки на проект и добавьте ее снова. Вероятно, вы случайно удалили или заменили dll.
Ответ 9
Я писал клиент службы WebApi REST, поэтому для меня эта ошибка была вызвана добавлением ссылок на сборки System.Net.Http
и System.Net.Http.Formatting
вручную с помощью Add Reference, когда я должен был добавить пакет Microsoft.AspNet.WebApi.Client
через NuGet.
См. Также этот ответ на другой вопрос.
Ответ 10
uninstall-package newtonsoft.json -force
install-package newtonsoft.json
Сделал трюк для меня:)
Ответ 11
Обычно добавление перенаправления привязки должно решить эту проблему, но для меня это не сработало. Через несколько часов ударившись головой о стену, я понял, что в моем web.config есть атрибут xmlns, вызывающий проблемы. После удаления атрибута xmlns из конфигурации node в Web.config переадресация привязки работала должным образом.
http://www.davepaquette.com/archive/2014/10/02/could-not-load-file-or-assembly-newtonsoft-json-version4-5-0-0.aspx
Ответ 12
если вы используете несколько проектов в одном решении
и библиотека другого
check - все проекты имеют ту же версию Newtonsoft.Json
Ответ 13
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json"
publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
Работает для меня.... просто поставьте версию, которую вы используете в newVersion i.e(newVersion = "7.0.0.0" )
Ответ 14
Разверните правильную версию на машине CI
Это говорит вам, что загрузчик сборок нашел другую версию сборки Newtonsoft.Json
, которая не соответствует ссылке, которую вы создали в своем проекте. Чтобы правильно загрузить сборку, вы должны либо развернуть сборку сбоку вместе с вашим скомпилированным кодом, либо установить правильную версию сборки на конечной машине (то есть в GAC).
Альтернатива: убедитесь, что конфигурация находится в правильном файле
Если вы хотите сохранить текущее решение и загрузить сборку с другой версией, убедитесь, что указанная вами конфигурация находится в правильном файле .config
. Помните, что нет xpto.dll.config
, DLL, загружаемая приложением, всегда использует файл конфигурации запущенного приложения.
Ответ 15
У нас была такая же проблема, о которой вы говорили. Мы используем nunit для запуска тестов через CI, и у нас есть nunit, запускающий файл с именем tests.nunit, который описывает список тестовых dll-приспособлений для запуска.
Каждый испытательный прибор имел свой собственный файл конфигурации, но при запуске через файл "tests.nunit" переадресация привязки, похоже, игнорируется. Решение заключалось в том, чтобы добавить переадресацию привязки в новый файл конфигурации "tests.config", который был рядом с файлом "tests.nunit".
Ответ 16
Вы должны обновить файл web.config на сервере.
Когда nuget устанавливает NewtonSoft, обновите этот файл, включая этот код
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
Ответ 17
Закрыть решение.
Откройте packages.config
и *.csproj
с помощью текстового редактора и удалите любую строку с помощью Newtonsoft.Json
Пример:
<Reference Include="Newtonsoft.Json,Version=9.0.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
</Reference>
Или
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />
Откройте снова решение и заново установите Newtonsoft.Json на Install-Package Newtonsoft.Json
Это работает для меня.
Ответ 18
В вашем решении есть две разные версии библиотеки JSON.NET. Чтобы решить эту проблему, вы должны обновить их до последней версии. Выполните следующие действия:
1-Open explorer
2-Правый Щелкните по имени решения
3-Выберите "Управление пакетами Nuget для решения"
4-Выберите обновления из меню
5-обновление пакета JSON.NET
Это решит вашу проблему.
ссылка:
Не удалось загрузить файл или сборку 'Newtonsoft.Json, Version = 7.0.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed' или одну из его зависимостей
Ответ 19
У меня такая же проблема. И я также решил это сделать следующее:
Перейдите в ИНСТРУМЕНТЫ > Диспетчер пакетов NuGet и выберите Консоль диспетчера пакетов. Наконец, выполните следующие две команды:)
- удалить пакет newtonsoft.json -force
- установочный пакет newtonsoft.json
Ответ 20
В моем случае основной проект был , все еще ссылающийся на старую версию Newtonsoft.Json, которая больше не существует в проекте (показана желтым восклицательным знаком). Удаление справки решает проблему, не требуется привязка к Rirectirect.
Ответ 21
У меня была такая же проблема с версией 7.0.0.0, и проблема, вызывающая мою проблему, была Microsoft.Rest.ClientRuntime, которая каким-то образом имела в виду неправильная версия (6.0.0.0) Newtonsoft.json, несмотря на правильное управление зависимостями в самородок (была установлена правильная версия newtonsoft.json(7.0.0.0)).
Я решил это, применив перенаправление выше от 6.0.0.0 до 7.0.0.0 (от Kadir Can) в файле конфигурации:
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0" />
---- > Через несколько дней, не меняя ничего, он снова появился с той же ошибкой. Я установил версию 6.0.0.0 n, обновив ее до 7.0.0.0, теперь она отлично работает.
Ответ 22
В моем случае, после загрузки сборки и добавления ссылки на проект, я решил это путем "разблокирования" DLL перед добавлением ссылки на проект.
Используя проводник Windows, перейдите в папку DLL, щелкните правой кнопкой мыши по DLL и выберите "свойства". На одной из вкладок вы найдете кнопку "разблокировать", а затем вы можете добавить ссылку, и сборка будет загружаться правильно.
Ответ 23
Я допустил ошибку при добавлении файла DLL NewtonSoft для .Net 4.5.
Мой основной проект был 4,5, но когда я добавил дополнительный проект для своего решения, он странно добавил его как проект .Net 2.0... и когда я попытался использовать DLL NewtonSoft 4.5 с этим, я получил этот "Newtonsoft" Ошибка Json не найдена.
Решение (конечно) состояло в том, чтобы изменить этот новый проект с .Net 2.0 до 4.5.
Ответ 24
Мне ничего не помогло, но на самом деле это было исправлено:
- Удалите все привязки зависимостей в app.config (из всех файлов app.config в решении)
- Выполните следующую команду из "Консоль диспетчера пакетов"
Get-Project -All | Надстройка BindingRedirect
- Перестроить
Ссылка:
http://blog.myget.org/post/2014/11/27/Could-not-load-file-or-assembly-NuGet-Assembly-Redirects.aspx
Ответ 25
Щелкните правой кнопкой мыши на своем проекте, выберите управление пакетами Nuget, введите newtonsoft в поле поиска и установите последнюю версию. Затем запустите приложение
Ответ 26
Я столкнулся с такой же ошибкой и боролся с ней часами. У меня был проект веб-API, который использует Newtonsoft.json и еще один проект UnitTest для проекта веб-API. Для проекта unit test также нужна ссылка Newtonsoft.json. Но при добавлении ссылки я получал исключение выше.
Я, наконец, разрешил его, добавив нижеприведенный фрагмент кода в app.config проекта unit test:
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
Ответ 27
Другая коварная проблема заключается в том, что похоже, что переадресация связывания может просто терпеть неудачу, если элемент имеет неправильную конфигурацию для любых других зависимых элементов сборки.
Убедитесь, что у вас есть только один элемент под каждым элементом.
В некоторых случаях VS генерирует это:
<dependentAssembly>
<assemblyIdentity ...
<assemblyIdentity ...
</dependentAssembly>
Вместо
<dependentAssembly>
<assemblyIdentity ...
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity ...
</dependentAssembly>
Мне долго приходилось осознавать, что это была проблема!
Ответ 28
Если ошибка исчезает локально и все еще появляется на сервере, решение, которое работает со мной, - это удалить папку bin и packages.config и web.config и повторно загрузить эти файлы.
Ответ 29
Проблема для меня была обесцененной версией Newtonsoft.Json. Повторная установка не помогла.
В Visual Studio перейдите в Инструменты- > Управление пакетами NuGet. Выберите "Обновления". Поиск Newtonsoft. Нажмите "Обновить", чтобы установить последнюю версию.
Ответ 30
Кроме того, в среде CI с восстановлением NuGet убедитесь, что у вас нет частичных папок, проверенных в исходном элементе управления. По умолчанию при добавлении папок в исходный элемент управления он автоматически исключает сборку. Кроме того, это разрушает всю цель восстановления пакетов nuget при сборке. Либо проверка сборок, либо проверка в каких-либо папках пакетов получат успешную сборку, но лучше не проверять пакеты nuget в исходном элементе управления.