Об ИТ из Канады

Блог Михаила Флёнова - программист, блогер, автор нескольких скандальных книг какими-то глазами...

Could not load file or assembly Newtonsoft.Json

2017-01-11 08:08:15 / Программирование

Наверно самый популярны вопрос, который я получаю от программистов компаний, которых мне приходилось консультировать, это вопрос связанный с библиотекой Newtonsoft.Json - при запуске сайта не загружается Newtonsoft.Json. Это достаточно популярная библиотека, которая позволяет сериализовывать объекты в JSON, что сейчас популярно для Web, ведь с помощью этого формата удобно обмениваться данными между JavaScript и бакэндом. 

Но у библиотеки есть огромный недостаток - она развивается слишком быстро и слишком популярна. Да, это недостатки. Потому что все связи делают на определенную версию. Если ты сделал ссылку на версию 4.1, а также используешь другую библиотеку, которая ссылается на версию 5.0, то возникает конфликт между версиями.

При компиляции нужно убедится, что именно самая последняя версия попадает в папку bin. Выглядит просто? Но даже это не все программисты умудряются сделать. Нужно просто обновить свою версию до последней. 

Что если ты обновляешь до последней, и она 6.0. Теперь ты ссылаешься на 6-ю версию, а та магическая библиотека, с которой все началось, продолжает ссылаться на 5.0 и при запуске сайта вылетает ошибка:

 

System.IO.FileLoadException : Could not load file or assembly 'Newtonsoft.Json, Version=X.X.0.0

 

Вот это вообще самый популярный вопрос, который я получаю - что делать? Ну видимо спросить меня проще, чем запустить гугл, но без проблем расскажу здесь. Если ты увидел ошибку Could not load file or assembly 'Newtonsoft.Json' 4.0.0.0, то нужно убедится, что у тебя в bin находится версия выше запрашиваемой. Теперь идет в Web.config файл и добавляем раздел runtime -> assemblyBinding:

 

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

 

Что здесь такое - если IIS найдет Newtonsoft.Json любой версии между 0.0.0.0 до 6.0.0.0 он загрузит 6.0.0.0. То есть теперь при попытке загрузить 5.0 реально загрузится 6.0 и это нормально для этой библиотеки, я пока проблем тут не видел. 


Понравилась статья?

Комментарии

Ololo

Ниразу не было проблем с этой библиотекой. И вообще я использую Jil, он по тестам в инете самый быстрый, да и по тем что я сам пробовал тоже. Его  разрабатывает и использует StackOverflow.

2017-01-11 09:21:14

Оставить комментарий


Умеешь пользоваться BB кодами? Прекрасно, здесь можно использовать [quote] для цитирования, а так же [b] и [i]. Остальные коды пока использовать запрещено. Я думаю по поводу их использования. В комментариях нельзя выяснять крутость каких-либо продуктов, нужно уважать собеседников и не грубить и нельзя ничего додумывать (читайте мои посты внимательно). Нарушение этих простых правил ведет к удалению комментариев без предупреждения.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Внимание!

А ты уже читал мою последнюю книгу о больших сайтах и приложениях? Узнай, что это такое здесь

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповидания на русском или английском языке.

Пишите мне