Библиотека службы WCF: BadImageFormatException с 32-битной DLL
Структура моего проекта выглядит так:
myApp
-->WCFSerLib (Any CPU Deafult application)
-->ClassLib1 (Any CPU)
-->ClassLib2 (x86)
Когда я пытаюсь выполнить свое заявление, к сожалению, я получаю эту ошибку ниже.
System.BadImageFormatException was unhandled by user code
Есть ли так, что я могу достичь вышеупомянутого?
Спасибо
3 ответа
Спасибо вам, ребята,
проблема была с winscard.dll он использует дескрипторы, которые являются Int32 . все, что я изменил, заменяет Int32 с Int64.
Если я угадаю, чем вы пытаетесь использовать dll x86 на машине x64. С AnyCPU.net Framework будет автоматически использовать архитектуру currient.
Таким образом, ваше приложение работает как приложение x64, которое пытается загрузить библиотеку x86, которая перестала работать. Итак, у вас есть два варианта:
- Установите целевую архитектуру на x86
- Добавить / создать библиотеку x64
Если у вас есть обе версии (x86/x64) где-то в переменной окружения, операционная система автоматически выберет правильную.
Я полагаю, что вы запускаете свое приложение в системе x64.
Смешивание типа платформы таким образом вызовет BFE, когда библиотека WCFService или методы ClassLib1 вызывают в ClassLib2, потому что первые два выполняются как 64-битные процессы, а последний вынужден работать в режиме x86.
Вы должны установить одинаковый тип платформы для каждого проекта.
Конечно, библиотека WCFService поддерживает только AnyCPU, поэтому имеет смысл использовать для каждого проекта тип платформы AnyCPU.
Если ваш ClassLib2 требует использования 32-битной библиотеки (winscard.dll) и 64-битная версия этой библиотеки отсутствует, то, я думаю, вам следует использовать приложение-службу WCF вместо библиотеки-сервиса. Смотрите этот вопрос