Не удалось загрузить файл или сборку 'Newtonsoft.Json, версия = 4.5.0.0, культура = нейтральная, PublicKeyToken = 30ad4fe6b2a6aeed'

233

Я получаю ошибку

System.IO.FileLoadException: не удалось загрузить файл или сборку 'Newtonsoft.Json, версия = 4.5.0.0, культура = нейтральная, 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>

Это тоже не сработало

user3437755
источник
Ошибка означает, что .NET не удалось найти библиотеку Json.NET . У вас это установлено?
TypeIA
22
Точно такая же проблема - сводит меня с ума. Дайте мне знать, если вы найдете решение
Дин Мел
На самом деле, добавление того, что вы пытались, решило проблему.
h.alex
Используйте параметр консолидации в диспетчере пакетов NuGet, чтобы убедиться, что версии не расходятся.
niico
Это единственное, что сработало для меня: github.com/Redth/PushSharp/issues/361#issuecomment-181387928
RichC

Ответы:

237

В пакете менеджер консоли выполнить: Update-Package –reinstall Newtonsoft.Json.

ОБНОВИТЬ

Первоначально я разместил это как комментарий, но, как предложил @OwenBlacker, я просто оставлю это здесь:

Если после этого вы все еще получаете сообщение об ошибке, то, в конечном итоге, у меня сработало то, что я удалил <dependentAssembly>раздел Json.Net из своего .configфайла. Переустановка возвращает его, если его там нет, и, очевидно, вам нужно удалить его. Пока не будет нормального решения в самой упаковке, я боюсь, что этот ручной шаг является обязательным.

Примечание: пожалуйста, прочитайте комментарии ниже, прежде чем делать это.

В соответствии с комментарием Рене, приведенным ниже, БУДЬТЕ ВНИМАТЕЛЬНЫ, что команда, опубликованная в ответе, переустанавливает пакет в каждом проекте вашего решения. Поэтому, если вы используете пакет Newtonsoft.Json в нескольких проектах и, возможно, используете разные версии, простое выполнение вышеуказанной команды может иметь нежелательные последствия.

bobah75
источник
7
Ради всех, кто читает это: я сделал это и все еще получил ошибку. Затем я решил это как-то: удивительно, мне пришлось удалить<dependentAssembly> раздел Json.Net из моего .configфайла. Переустановка возвращает его, если его там нет, и, очевидно, вам нужно удалить его. Пока не будет нормального решения в самой упаковке, я боюсь, что этот ручной шаг является обязательным.
Офер Зелиг
@OferZelig Вы должны опубликовать это как отдельный ответ, чтобы он мог получить положительные отзывы (и, что более важно, повышенное внимание). Не в последнюю очередь потому, что это сработало и для меня :)
Оуэн Блэкер
@OwenBlacker спасибо. Но поскольку ответов уже много, мой заблудится. И этот ответ довольно хороший, просто если он не работает, мой комментарий «заканчивает» его. Знаешь что? Я думаю, я просто отредактирую оригинальный ответ. Более важно, чем получить собственную репутацию
Офер Зелиг
43
ВНИМАНИЕ, что команда, опубликованная в ответе, переустанавливает пакет в каждом проекте вашего решения. Поэтому, если вы используете пакет Newtonsoft.Json в нескольких проектах и, возможно, используете разные версии, простое выполнение вышеуказанной команды может иметь нежелательные последствия.
Рене
Решено! Для меня v6 был установлен в одном проекте, переустановка из диспетчера пакетов привела его к v7.
jv-dev
123

Всем, у кого есть проблемы с версией 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тега вашего конфигурационного файла нет атрибута пространства имен (как предложено в https://stackoverflow.com/a/12011221/150370 ). В противном случае assemblyBindingтеги будут игнорироваться.

ZeroDotNet
источник
3
для меня удаление содержимого папки bin вручную после очистки (которая не очищает его) сделало свое дело после того, как я применил этот ответ.
Микаэль Майер
Большое спасибо за это! :)
Камрон К.
Прекрасно работает! По состоянию на 7/4/15 текущей версией Newtonsoft.Json является 7.0.0, поэтому ее newVersion="6.0.0.0"следует заменить на newVersion="7.0.0.0"любую версию, которую вы используете
Моисей Мачуа
3
Эта записка в пространстве имен ... Я могу обнять тебя. Я потратил часы на это, не зная, что из-за этого игнорировались редиректы.
Брайан
1
Примечание о пространстве имен настолько важно, что оно может быть ответом само по себе. Большое спасибо.
beawolf
42

Ключевым моментом является ссылка на правильную версию в вашем конфигурационном файле.

шаги;

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>
Кадир Джан
источник
Извините, я могу отдать только один голос за вашу точку зрения (например, у меня 7.0.1 и референсная версия 7.0.0.0). Я бы дал больше ..... Спасибо :)
Закер
Это сработало для меня. Я обновил версию до 7, но она действительно работала с версией 8, поэтому я просто изменил новую версию на 8.0, спасибо!
Кит
Даже при установке 8.0.3 (как сказано в диспетчере пакетов nuget) .dll по ссылкам все равно 8.0.0. Поэтому я изменил на 8.0.0.0 в моем web.config. Странно, как это работало вчера, когда я опубликовал все, а сегодня утром это больше не работает.
CularBytes
24

Мне не повезло ни с одним из представленных здесь решений (удаление, переустановка, удаление ссылок, создание bindingRedirects и т. Д.). Мне пришлось вернуться к старой версии Newtonsoft. Версия 5.0.6 работала раньше, поэтому я попробовал ее. Мне пришлось ввести эти две команды в консоли пакетов:

uninstall-package newtonsoft.json -force

install-package newtonsoft.json -version "5.0.6"

Параметр -forceв первой команде необходим для принудительного удаления. Зависимости с другими сборками предотвращают удаление без него.

Карл Хоаглунд
источник
Работал как шарм. Была ошибка в моем проекте MVC 4. Почти перешел на родной сериализатор.
Кис К. Баккер
спасибо, мне просто нужно было изменить -version "5.0.6" на -pre: install-package newtonsoft.json -pre
thiago.adriano26
22

Я исправил проблему с добавлением этого перенаправления привязки в мой файл .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, а не наоборот.

MiMo
источник
Да, это решило мою проблему. Так странно, что количество проблем, которые вызывает JSON.NET ... но однажды это становится машиной мечты. Спасибо +1
Петр Кула
Ваш фрагмент кода заставил меня понять, что отсутствует элемент assemblyBinding. Спасибо
Рига
21

Я думаю, что вы указываете на неправильную цель, измените ее на 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>

Это должно работать.

BrunoLM
источник
1
Umbraco 7 требовал 4.5.0.0, так что это помогло запустить его
MagicalArmchair
19

Я потратил пару дней, пытаясь решить эту неприятную проблему. Я перепробовал почти все, что можно найти в Интернете. Наконец, я обнаружил, что эта ошибка может быть вызвана (как в моем случае) различными целевыми версиями проекта .Net (4.5 и 4.5.1) в одном решении. Шаги ниже исправили это для меня:

  1. Дважды проверьте .Net-версию каждого проекта, который входит в ваше решение. Просто щелкните правой кнопкой мыши на проекте и перейдите к Properties.

введите описание изображения здесь

  1. Если возможно, установите одинаковую версию .Net для всех проектов. Если не по крайней мере, попытайтесь изменить проект запуска (для меня это был тот, который вызывает проблемы).

  2. Удалите все Newtonsoft.Jsonпакеты из раствора.

    uninstall-package newtonsoft.json -force

  3. Обновите все Newtonsoft.Jsonверсии во всех packages.configфайлах, вот так

    <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net451" />

  4. Переустановите Newtonsoft.Jsonиз «Консоли диспетчера пакетов» с помощью:

    install-package newtonsoft.json

  5. Восстановить решение

(Необязательно) 7. Если вы изменили проект автозагрузки, верните его снова

ekostadinov
источник
12
uninstall-package newtonsoft.json -force
install-package newtonsoft.json

Сделал трюк для меня :)

Chiranjeeb
источник
1
это тоже помогло мне. он автоматически обновляет файл webconfig до правильной версии.
Шаакир
Мне тоже это действительно помогло.
Майк
11

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

Фатих
источник
Это была моя проблема. Очень расстраивает, просматривая все ответы выше и не получая результатов. Наконец понял, когда мне надоело проверять версию .dll в моей папке Build.
10

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

helb
источник
Этот подход работает против проекта Xamarin Forms iOS, где я отбросил пакет NuGet и повторно добавил его. Спасибо.
Сенатор
9

Я писал клиент сервиса WebApi REST, поэтому для меня эта ошибка была вызвана добавлением ссылок на сборки System.Net.Httpи System.Net.Http.Formattingсборок вручную с помощью добавления ссылки, когда я должен был добавить Microsoft.AspNet.WebApi.Clientпакет через NuGet . Смотрите также этот ответ на другой вопрос .

mschwaig
источник
8

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

1-Откройте обозреватель решений. 2-Щелкните правой кнопкой мыши на имени решения. 3-Выберите Управление пакетами Nuget для решения. 4-Выберите обновления в меню. 5-Обновите пакет JSON.NET.

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

ссылка: не удалось загрузить файл или сборку 'Newtonsoft.Json, версия = 7.0.0.0, культура = нейтральная, PublicKeyToken = 30ad4fe6b2a6aeed' или одна из ее зависимостей

мохаммад
источник
Самый простой и безопасный способ решить эту проблему. Спасибо @mohammad
deanwilliammills
7

Разверните правильную версию на машине CI

Это говорит о том, что загрузчик сборки обнаружил другую версию Newtonsoft.Jsonсборки, которая не соответствует ссылке, созданной вами в вашем проекте. Чтобы правильно загрузить сборку, вы должны либо развернуть сборку рядом с вашим скомпилированным кодом, либо установить правильную версию сборки на конечном компьютере (то есть в GAC).

Альтернатива: убедитесь, что конфигурация находится в правильном файле

Если вы хотите сохранить текущее решение и загрузить сборку с другой версией, убедитесь, что опубликованная вами конфигурация находится в правильном .configфайле. Помните, что нет xpto.dll.config, DLL, загруженная приложением, всегда использует файл конфигурации запущенного приложения.

Мигель Анджело
источник
6

Обычно добавление перенаправления привязки должно решить эту проблему, но у меня это не сработало. После нескольких часов удара головой о стену я понял, что в моем файле web.config есть атрибут xmlns, вызывающий проблемы. После удаления атрибута xmlns из узла конфигурации в Web.config перенаправления привязки работали, как и ожидалось.

http://www.davepaquette.com/archive/2014/10/02/could-not-load-file-or-assembly-newtonsoft-json-version4-5-0-0.aspx

Дэвид Пакетт
источник
5
<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 т.е. (newVersion = "7.0.0.0")

али
источник
Была эта проблема несколько раз назад, и это было исправлено в один удар. Большое спасибо.
ГутьеррезДев,
5

Закрыть решение.

Открыть 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

Это работает для меня.

Trương Quốc Khánh
источник
это работает когда-то, но в следующих сборках эта проблема снова возникла снова
Химаншу Бхалла
Нет проблем, если не обновлять его, ха-ха. Создайте мусорный проект и установите Newtonsoft.Json.dll, скопируйте его (файл dll) и добавьте в свой проект ссылку.
Trương Quốc Khánh
4

У нас была та же самая проблема, о которой вы упоминали. Мы используем nunit для запуска тестов через CI, и у нас есть nunit, запускающий файл под названием tests.nunit, в котором описывается список тестовых приспособлений dll для запуска.

Каждый тестовый прибор имел свой собственный файл конфигурации, но при запуске через файл «tests.nunit» перенаправления привязки, похоже, игнорируются. Решением было добавить перенаправления привязки в новый файл конфигурации «tests.config», который находился рядом с файлом «tests.nunit».

declyne
источник
можешь уточнить?
KirstieBallance
4

У меня такая же проблема. И я также решил это, выполнив следующие действия: Перейдите в TOOLS > Диспетчер пакетов NuGet и выберите Консоль диспетчера пакетов . Наконец, выполните следующие две команды :)

  1. удалить-пакет newtonsoft.json -force
  2. установочный пакет newtonsoft.json
Масуд Шрабон
источник
4

Вам следует обновить файл 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>

oaamados
источник
В моем случае это было именно мое решение, поместите в app.config. «Версии сборки могут быть перенаправлены в приложение, политику издателя или файлы конфигурации компьютера».
дата
4

Просто проверьте версию свойств Newtonsoft.Json Newtonsoft

Затем вам нужно добавить эту версию в ваш веб-конфиг (в моем случае 8.0.0.0) веб- конфиг

Джеральд Стэнли Паджет Эспиноз
источник
3

Я сделал ошибку, добавив .dll-файл NewtonSoft для .Net 4.5.

Мой главный проект был 4.5, но когда я добавил дополнительный проект в свое решение, он странным образом добавил его в качестве проекта .Net 2.0 ... и когда я попытался использовать 4.5 dll NewtonSoft с этим, я получил это "Newtonsoft.Json не найдена "ошибка.

Решение (конечно) состояло в том, чтобы изменить этот новый проект с .Net 2.0 на 4.5.

Майк Гледхилл
источник
3

В моем случае основной проект все еще ссылался на старую версию Newtonsoft.Json, которой в проекте больше не было (показано желтым восклицательным знаком). Удаление ссылки решило проблему, не было необходимости в bindingRedirect.

IngoB
источник
3

У меня была точно такая же проблема с версией 7.0.0.0, и библиотека, вызывающая мою проблему, была Microsoft.Rest.ClientRuntime, которая как-то ссылалась на неправильную версию (6.0.0.0) Newtonsoft.json, несмотря на правильное управление зависимостями в nugget ( правильная версия 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 и обновил ее до 7.0.0.0, теперь она работает нормально.

lazizanie
источник
Работал на меня. Установленная версия Newtonsoft Json 7.0.1 (бета), но сгенерированная конфигурация указала на 6.0.0.0, что было неверно. Спасибо!
Dhanuka777
2

В моем случае, после загрузки сборки и добавления ссылки на проект, я решил эту проблему, «разблокировав» библиотеку DLL перед добавлением ссылки на проект.

С помощью проводника Windows перейдите в папку DLL, щелкните правой кнопкой мыши DLL и выберите «Свойства». На одной из вкладок вы найдете кнопку «разблокировать», а затем сможете добавить ссылку, и сборка загрузится правильно.

VorTechS
источник
2

Ничто из вышеперечисленного не помогло мне, но на самом деле это исправлено следующим образом:

  1. Удалите все привязки зависимостей в app.config (из всех файлов app.config в решении)
  2. Выполните следующую команду из «Консоли диспетчера пакетов»

Get-Project -Все | Надстройка BindingRedirect

  1. перестраивать

Ссылка: http://blog.myget.org/post/2014/11/27/Could-not-load-file-or-assembly-NuGet-Assembly-Redirects.aspx

valentinvs
источник
2

Щелкните правой кнопкой мыши свой проект, выберите управление пакетами Nuget, введите newtonsoft в поле поиска и установите последнюю версию. Затем запустите ваше приложение

Уч Годфри
источник
2

Я столкнулся с той же ошибкой и боролся с ней часами. У меня был проект веб-API, который использует Newtonsoft.json и другой проект UnitTest для проекта веб-API. Проект модульного тестирования также нуждался в ссылке Newtonsoft.json. Но при добавлении ссылки я получил вышеупомянутое исключение.

Я наконец решил ее, добавив приведенный ниже фрагмент кода в app.config проекта модульного теста:

<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>
mukulsharma1146
источник
<independentAssembly> <assemblyIdentity name = "Newtonsoft.Json" publicKeyToken = "30AD4FE6B2A6AEED" culture = "нейтральный" /> <bindingRedirect oldVersion = "0.0.0.0-6.0.0.0" newVersion = "6.0.0.0" /> </ depenAssembly>
mukulsharma1146
У меня была такая же проблема, когда я обновлял Nestwonsoft.Json, все еще используя старую версию WebAPI, и это решило ее. Спасибо!
Gavin.Paolucci.Kleinow
2

Еще одна коварная проблема заключается в том, что перенаправления привязки могут просто молча завершиться сбоем, если элемент имеет неправильную конфигурацию для любых других элементов зависимых сборок.

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

В некоторых случаях VS генерирует это:

  <dependentAssembly>
    <assemblyIdentity ...
    <assemblyIdentity ...
  </dependentAssembly>

Вместо того

  <dependentAssembly>
    <assemblyIdentity ...
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity ...
  </dependentAssembly>

Мне потребовалось много времени, чтобы понять, что это проблема!

Даниил
источник
2

Ниже раздел добавить в свой web.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>
Джейдип шил
источник
2

Если ошибка исчезает локально и все еще появляется на сервере, решение, которое работает со мной, состоит в том, чтобы удалить папку bin и packages.config и web.config и повторно загрузить эти файлы

Ахмад Алаа
источник