Could not load file or assembly Newtonsoft.Json

Наверно самый популярны вопрос, который я получаю от программистов компаний, которых мне приходилось консультировать, это вопрос связанный с библиотекой 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.


Добавить Комментарий

О блоге

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

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

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

Пишите мне