Страницы

Поиск по вопросам

суббота, 21 декабря 2019 г.

System.BadImageFormatException: Невозможно загрузить файл или сборку Newtonsoft.Json

#c_sharp #net #windows_server

Написал приложение с использованием библиотеки Newtonsoft.Json. При попытке запуска
приложения из Visual Studio 2015 или 2013 — все работает, при попытке запуска на трех
разных ПК (разные версии Windows и разные разрядности систем) вне среды VS — все работает,
но при попытке запуска на двух разных (были заказаны у разных хостинг провайдеров)
VPS KVM с Windows Server 2012 R2 x64 (.NET Framework установлен) — приложение не может
загрузить библиотеку Newtonsoft.Json.dll. Проблема возникает только с этой библиотекой.
Пробовал добавлять библиотеку в ресурсы и загружать их них — эффект тот же. Если из
приложения убрать части кода, отвечающие за работу с JSON (то есть удалить использование
самой библиотеки), то все прекрасно везде работает.

Ниже приведена ошибка, которая возникает при запуске:

System.BadImageFormatException: Невозможно загрузить файл или сборку "Newtonsoft.Json,
Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" или один из зависимых
от них компонентов. Ожидалось, что модуль содержит манифест сборки.
Имя файла: "Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed"
   в ***.***.ReadAllItemsInfo()
   в ***.Program.Main(String[] args) в C:\---\Program.cs:строка 55

=== Информация о состоянии предварительной привязки ===
Журнал: DisplayName = Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed
 (Fully-specified)
Журнал: Appbase = file:///C:/---/
Журнал: Initial PrivatePath = NULL
Вызов сборки: SoketServer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.

Журнал: данная привязка начинается в контексте загрузки default.
Журнал: используется файл конфигурации приложения: C:\---\---.exe.Config.
Журнал: используется файл конфигурации главного узла: 
Журнал: используется файл конфигурации компьютера из C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
Журнал: ссылка после применения политики: Newtonsoft.Json, Version=7.0.0.0, Culture=neutral,
PublicKeyToken=30ad4fe6b2a6aeed
Журнал: попытка загрузки нового URL file:///C:/---/Newtonsoft.Json.DLL.
Ошибка: не удалось завершить установку сборки (hr = 0x80131018). Проверка прекращена.

Void ReadAllItemsInfo()

    


Ответы

Ответ 1



Подобная ошибка может быть в случае, если вы построили проект с AnyCpu, в то время как какая то из подключенных библиотек построена с x86\x64. Как решать такую проблему можно узнать тут: https://stackoverflow.com/questions/270531/how-to-determine-if-a-net-assembly-was-built-for-x86-or-x64 Так же рекомендую проверить версию .net фреймворка и проверить в конфиге версию рантайма: Так же проверьте биндинги:

Ответ 2



Ответ выше мне никак не помог (вероятно потому, что у меня Sharepoint 2013, а не отдельное приложение), оказалось что стоило всего лишь добавить сборку в глобальный кэш сборок: gacutil -i Newtonsoft.Json.dll Утилиту gacutil нужно вызывать из Developer Command Prompt в папке Visual Studio.

Комментариев нет:

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