Почему 32-битное значение вызывает исключение BadImageFormatExmat системы WCF?

Я опубликовал небольшое веб-приложение со службами WCF локально, используя файловую систему в Visual Studio Community 2017. Я разместил его локально, чтобы протестировать его, и заметил, что одна служба WCF не была вызвана, и вызвал исключение System.BadImageFormatException. Причиной была единственная переменная id из метода типа Int32. Платформа решения в Configuration Manager представляет собой "Смешанные платформы" с любым процессором. Так что проблемы не было. Я последовал за решением bluwater2001, включив 32-битные приложения в пул приложений. Однако мой вопрос остается: почему 32-битная переменная вызвала такую ​​ошибку, тогда как мое веб-приложение было создано для любых процессоров и смешанных платформ? И почему было необходимо включить 32-разрядные приложения в пуле приложений в IIS?

1 ответ

Это не имеет ничего общего с типом ваших переменных / параметров.

Если вы выбираете AnyCPU, ваш код может работать на любой платформе. Он скомпилируется в 32-битный код на 32-битной машине и в 64-битный код на 64-битной машине.

Если ваша сборка выполняется как 32-битный процесс, она не может загрузить 64-битную сборку и наоборот. Если он пытается загрузить сборку, которая не соответствует процессу, вы получаете исключение BadImageFormatException.

Другие вопросы по тегам