#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.
Комментариев нет:
Отправить комментарий