Я получаю ошибку
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>
Это тоже не сработало
В консоли диспетчера пакетов выполните: Update-Package – reinstall Newtonsoft.Json
.
ОБНОВЛЕНИЕ
Я первоначально разместил это как комментарий, но, как предположил @OwenBlacker, я просто положу это здесь:
Если после этого вы все еще получаете ошибку, то в конечном итоге для меня работает то, что я удалил раздел Json.Net < independentAssembly >
из моего файла .config
. Переустановите его, если его там нет, и, очевидно, вам нужно его удалить. Пока в самой упаковке не будет нормального решения, я боюсь, что этот ручной шаг необходим.
Примечание: Пожалуйста, прочитайте комментарии ниже, прежде чем делать это.
В соответствии с комментарием Ren & # 233; ниже BE AWARE , что команда, опубликованная в ответе, переустанавливает пакет в каждом проекте вашего решения. Поэтому, если вы используете пакет Newtonsoft.Json в нескольких проектах и, возможно, используете разные версии, простое выполнение вышеуказанной команды может иметь нежелательные последствия.
Для всех, у кого есть проблемы с версией 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>
IMPORTANT : убедитесь, что тег configuration
вашего файла конфигурации не имеет атрибута пространства имен (как предложено в https://stackoverflow.com/a/12011221/150370). В противном случае теги assemblyBinding
будут игнорироваться.
Ключевым моментом является ссылка на правильную версию в вашем файле конфигурации.
Шаги;
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>
Мне не повезло ни с одним из решений, представленных здесь (установка, переустановка, удаление ссылок, создание bindingRedirects и т. Д.).) Я должен был вернуться к старой версии Newtonsoft. Версия 5.0.6 работала раньше, поэтому я попробовал это. Я должен был ввести эти две команды в Консоль пакета:
uninstall-package newtonsoft.json -force
install-package newtonsoft.json -version "5.0.6"
Параметр -force
в первой команде требуется для принудительного удаления. Зависимости с другими узлами предотвращают удаление без него.
Я исправил проблему, добавив это переадресацию привязки в мой файл .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, а не наоборот
Я думаю, что вы указываете не на ту цель, измените ее на 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>
Это должно работать.
Я провел пару дней, пытаясь решить эту неприятную проблему. Я перепробовал почти все, что можно найти в Интернете. Наконец, я обнаружил, что эта ошибка может быть вызвана (как в моем случае) различными целевыми версиями проекта .Net (4.5 и 4.5.1) в одном решении. Ступени ниже исправили это для меня:
Если возможно, установите одну и ту же версию .Net для всех проектов. Если не хотя бы попытаться изменить проект Startup (для меня это было причиной проблем).
Удалите все пакеты 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. Если вы изменили проект Startup, верните его снова
uninstall-package newtonsoft.json -force
install-package newtonsoft.json
Сделал трюк для меня :)
Я писал сервисный клиент WebApi REST, поэтому для меня эта ошибка была вызвана добавлением ссылок на сборки System.Net.Http
и System.Net.Http.Formatting
вручную через Add Reference, когда я должен был добавить Microsoft.AspNet.WebApi.Client
через < b > NuGet < & b ;.
Смотрите также этот ответ на другой вопрос.
В вашем решении есть 2 разные версии библиотеки JSON.NET. Чтобы решить эту проблему, вы должны обновить их до последней версии. Выполните следующие действия:
1-Открытый исследователь решений 2-Right Нажмите на название решения 3-Выберите Управление пакетами Nuget для решения 4-Выберите обновления из меню 5-Update JSON.NET пакет
Это решит вашу проблему.
Разверните правильную версию на машине CI
Это говорит о том, что сборочный погрузчик нашел другую версию сборки Newtonsoft.Json
, которая не соответствует ссылке, созданной вами в вашем проекте. Чтобы правильно загрузить сборку, вы должны либо развернуть сборку рядом с скомпилированным кодом, либо установить правильную версию сборки на машине назначения (т.е. в GAC).
Альтернатива: убедитесь, что конфигурация находится в правильном файле
Если вы хотите сохранить текущее решение и загрузить сборку с другой версией, убедитесь, что опубликованная вами конфигурация находится в правильном файле .config
. Помните, что нет xpto.dll.config
, DLL, загруженная приложением, всегда использует файл конфигурации работающего приложения.
Обычно добавление обязательного перенаправления должно решить эту проблему, но это не сработало для меня. После нескольких часов удара головой о стену я понял, что в моем web.config есть атрибут xmlns, вызывающий проблемы. После удаления атрибута xmlns из узла конфигурации в 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="7.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
& Лт; / время выполнения >
Работает для меня.... просто поместите версию, которую вы используете, в newVersion, т.е. (newVersion = "7.0.0.0")
Закрыть решение.
Откройте packages.config
и * .csproj
с помощью текстового редактора и удалите любую строку, имеющую Newtonsoft.Json
Ex: `< Reference Include = "Newtonsoft.Json, Version = 9.0.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed, процессорАрхитектура = MSIL" >
< HintPath >..\ packages \ Newtonsoft.Json.9.0.1 \ lib \ net40 \ Newtonsoft.Json.dll < / HintPath > < Private > True < / Private > & Лт; / Ссылка > `Или
< package id = "Newtonsoft.Json" version = "9.0.1" targetFramework = "net40" / >
Снова откройте решение и переустановите Newtonsoft.Json в Install-Package Newtonsoft.Json
Это работает для меня.
Вы должны обновить файл 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>
& Лт; / время выполнения >
У нас была та же проблема, что и вы. Мы используем nunit для запуска тестов через CI, и у нас есть nunit, работающий с файлом tests.nunit, который описывает список тестовых приборов для запуска.
Каждое тестовое устройство имело свой собственный файл конфигурации, но при запуске файла «tests.nunit» переадресации связывания, кажется, игнорируются. Решение состояло в том, чтобы добавить переадресацию связывания в новый файл конфигурации "tests.config", который находился рядом с файлом "tests.nunit".
У меня такая же проблема. И я также решил это, просто делая следующее: Перейти к ИНСТРУМЕНТЫ > NuGet Package Manager и выберите Консоль Package Manager . Наконец, выполните следующие две команды :)
У меня была точно такая же проблема с версией 7.0.0.0, и lib, вызвавший мою проблему, был Microsoft.Rest.ClientRuntime, который каким-то образом имел в виду неправильную версию (6.0.0.0) Newtonsoft.json, несмотря на правильное управление зависимостями в самородке (правильная версия newtonsoft.json (7.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, теперь она отлично работает.