Не вдалося завантажити файл чи збірку "Newtonsoft.Json, Версія = 4.5.0.0, Культура = нейтральна, PublicKeyToken = 30ad4fe6b2a6aeed"


233

Я отримую Помилку

System.IO.FileLoadException: Не вдалося завантажити файл або збірку 'Newtonsoft.Json, Версія = 4.5.0.0, Культура = нейтральна, PublicKeyToken = 30ad4fe6b2a6aeed' або одна з її залежностей. Маніфестне визначення розташованої збірки не відповідає посиланням на збірку. (Виняток з HRESULT: 0x80131040)

для моєї побудови ІС

Рішення, яке я спробував

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

Це також не спрацювало


Помилка означає, що .NET не зміг знайти бібліотеку Json.NET . У вас це встановлено?
TypeIA

22
Точний же проблемн - заганяє мене горіхів. Повідомте мене, якщо ви знайдете рішення
Дін Крейк

Власне, для мене, додавши те, що ви намагалися вирішити проблему.
h.alex

Використовуйте параметр консолідації в менеджері пакетів NuGet, щоб версії не розходилися.
niico

Це єдине, що працювало для мене: github.com/Redth/PushSharp/isissue/361#issuecomment-181387928
RichC

Відповіді:


237

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

ОНОВЛЕННЯ

Я спочатку розмістив це як коментар, але, як @OwenBlacker запропонував, я просто викладу його тут:

Якщо після цього ви все-таки отримаєте помилку, то зрештою для мене спрацювало те, що я видалив <dependentAssembly>розділ Json.Net зі свого .configфайлу. Перевстановлення повертає його назад, якщо його немає, і, мабуть, його потрібно видалити. Поки не буде нормального рішення в самому пакеті, я боюся, що цей крок вручну є необхідним.

Примітка. Будь ласка, прочитайте коментарі нижче, перш ніж робити це.

Відповідно до коментаря Рене нижче БУДЬ ЗАБЕЗПЕЧЕНО, що команда, розміщена у відповіді, переустановить пакет у кожному проекті вашого рішення. Отже, якщо ви використовуєте пакет Newtonsoft.Json в декількох проектах і, можливо, використовуєте різні версії, саме виконання вищевказаної команди може мати небажані наслідки.


7
Заради всіх, хто це читав: я це зробив і все-таки отримав помилку. Тоді я якось вирішив це: Дивно, але мені довелося видалити<dependentAssembly> розділ Json.Net з мого .configфайлу. Перевстановлення повертає його назад, якщо його немає, і, мабуть, його потрібно видалити. Поки не буде нормального рішення в самому пакеті, я боюся, що цей крок вручну є необхідним.
Офер Зеліг

@OferZelig Ви повинні опублікувати це як окрему відповідь, щоб вона могла отримати результати (і, що ще важливіше, посилення уваги). Не в останню чергу тому, що це працювало і для мене :)
Оуен Блекер

@OwenBlacker дякую. Але оскільки відповідей уже багато, моя загубиться. І ця відповідь є досить хорошою, це просто те, що якщо вона не працює, то мій коментар "завершує" її. Знаєш, що? Я думаю, що я просто відредагую оригінальну відповідь. Важливіше, ніж здобуття власної респ.
Ofer Zelig

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теги будуть проігноровані.


3
для мене, видаливши вміст папки бін вручну після очищення (що не спорожнює її), я зробив трюк після того, як я застосував цю відповідь.
Mikaël Mayer

Дякую тоні за це! :)
Камрон К.

Чудово працює! Станом на 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, тому я просто змінив newVersion на 8.0, дякую!
Кіт

Навіть незважаючи на встановлення 8.0.3 (як це написано в Nuget Manager Manager), .dll під посиланнями все ще 8.0.0. Тому я змінив на 8.0.0.0 у своєму web.config. Wierd, як це працювало вчора, коли я все опублікував, і сьогодні вранці це вже не працює.
CularBytes

24

Мені не пощастило з жодним із запропонованих тут рішень (видалення, перевстановлення, видалення посилань, створення прикріпленьReedirects тощо) мені довелося повернутися до старої версії Newtonsoft. Версія 5.0.6 працювала раніше, тому я спробував цю. Мені довелося ввести ці дві команди в консоль пакета:

uninstall-package newtonsoft.json -force

install-package newtonsoft.json -version "5.0.6"

-forceВаріант в першій команді потрібно , щоб змусити деінсталювати. Залежності від інших збірок перешкоджають видаленню без нього.


Працював як шарм. Була помилка в моєму проекті MVC 4. Майже перейшов на рідний серіалізатор.
Kees C. Bakker

дякую, мені просто потрібно було змінити -вернення "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, а не навпаки


Так, це вирішило мою проблему. Настільки дивна кількість проблем, які викликає JSON.NET .. але колись вона виходить її машиною мрії. Дякуємо +1
Piotr Kula

Ваш фрагмент коду змусив мене зрозуміти, що не вистачає елемента '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>

Це має спрацювати.


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. Якщо ви змінили проект запуску, поверніть його ще раз


12
uninstall-package newtonsoft.json -force
install-package newtonsoft.json

Трюк для мене :)


1
це зробило трюк і для мене. він автоматично оновив файл webconfig до правильної версії.
Шаакір

Мені теж це справді допомогло.
Майк Малтер

11

якщо ви використовуєте кілька проектів в одному і тому ж рішенні та бібліотеку одного іншого, перевіряйте, чи всі проекти мають однакову версію Newtonsoft.Json


Це було моє питання. Дуже неприємно переглядати всі відповіді вище та не давати результатів. Нарешті я зрозумів це, коли я намагався перевірити версію .dll у своїй папці Build.

10

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


Це підійшло до роботи над проектом iOS Xamarin Forms, де я скинув пакет NuGet і повторно додав його. Дякую.
Сенатор

9

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


8

У вашому рішенні є дві різні версії бібліотеки JSON.NET. Для вирішення цього питання слід оновити їх до останньої версії. Виконайте такі дії:

1-Open Explorer Explorer 2-Клацніть правою кнопкою миші на назві рішення 3-Select Control Nuget Packages for Solution 4-Select Updates from the menu 5-Update JSON.NET package

Це вирішить вашу проблему.

посилання: Не вдалося завантажити файл або збірку "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 by Install-Package Newtonsoft.Json

Це працює для мене.


вона працює десь, але в майбутніх побудовах ця проблема знову з’явилася знову
Heemanshu Bhalla

Немає проблем, якщо не оновити його ха-ха. Створіть проект сміття та встановіть Newtonsoft.Json.dll, скопіюйте його (file dll) та додайте до посилання на ваш проект.
Trương Quốc Khánh

4

У нас був такий самий випуск, про який ви згадали. Ми використовуємо nunit для запуску тестів через CI, і у нас є nunit, який запускає файл під назвою testing.nunit, який описує список тестових dll-приладів, які потрібно запустити.

Кожен тестовий пристрій мав власний конфігураційний файл, але при запуску через файл "testing.nunit" переадресації прив'язки, здається, ігноруються. Рішення полягало в тому, щоб додати обов'язкові переадресації до нового конфігураційного файлу, "testing.config", який був поруч із файлом "testing.nunit".


чи можете ви докладно?
KirstieBallance

4

У мене однаковий тип проблем. І я також вирішив це, виконавши наступне: Перейдіть до TOOLS > NuGet Package Manager та виберіть Console Package Manager . Нарешті, виконайте наступні дві команди :)

  1. видаліть пакунок newtonsoft.json -force
  2. install-package newtonsoft.json

4

Ви повинні оновити файл web.config на сервері. Коли встановлюється 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>


У моєму випадку це було саме моє рішення, покладіть у app.config. "Версії для складання можна переспрямувати в додатки, політику видавця або файли конфігурації машини."
датс


3

Я помилився, додавши .dll файл NewtonSoft для .Net 4.5.

Головним моїм проектом було 4,5, але коли я додав додатковий проект до свого рішення, він дивно додав його як .Net 2.0 проект ... і коли я намагався використовувати 4,5 dll NewtonSoft 4,5 dll, я отримав цей "Newtonsoft.Json Cann Помилка "не знайдено"

Рішенням (звичайно) було змінити цей новий проект з .Net 2.0 на 4.5.


3

У моєму випадку основний проект все ще посилався на стару версію Newtonsoft.Json, яка вже не існувала в проекті (показана жовтим знаком оклику). Видалення посилання вирішило проблему, не потрібно було прив'язувати перенаправлення.


3

У мене була та сама проблема з версією 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) у файлі config:

<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0" />

----> Через кілька днів, нічого не змінюючи, він знову з’явився з тією ж помилкою. Я встановив версію 6.0.0.0 n оновив її до 7.0.0.0, вона працює нормально.


Працювали для мене. Встановлена ​​версія Newtonsoft Json 7.0.1 (бета), але створена конфігурація вказувала на 6.0.0.0, що було невірно. Дякую!
Dhanuka777

2

У моєму випадку, після завантаження збірки та додавання посилання на проект, я вирішив це шляхом "розблокування" DLL перед тим, як додати посилання на проект.

За допомогою Провідника Windows перейдіть до місця DLL, клацніть правою кнопкою миші DLL та виберіть "Властивості". Ви знайдете кнопку "розблокувати" на одній із вкладок, після чого можете додати посилання, і збірка буде завантажена правильно.


2

Ніщо зверху мені не допомогло, але те, що насправді це виправило, -

  1. Видаліть усі прив’язки залежності в app.config (з усіх файлів app.config у рішенні)
  2. Виконайте таку команду з "Консолі диспетчера пакунків"

Get-Project -Всі | Add-BindingRedirect

  1. Перебудувати

Довідка: http://blog.myget.org/post/2014/11/27/Could-not-load-file-or-assembly-NuGet-Assembly-Redirects.aspx


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>

<dependentAssembly> <AssemblyIdentity name = "Newtonsoft.Json" publicKeyToken = "30AD4FE6B2A6AEED" culture = "нейтральний" /> <indingRedirect oldVersion = "0.0.0.0-6.0.0.0" newVersion = "6.0.0.0" /> </dependentAs
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

Якщо помилка зникає локально і все ще з’являється на сервері, рішення, яке працює зі мною, - видалити папку бін і пакети.config і web.config і перезавантажити ці файли

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.