2015-05-04 4 views
0

У нас есть WebService, который работает некоторое время, на нем есть около 6 проектов. Недавно нам пришлось поддерживать 32-битную библиотеку C++, которую я тестировал, и мне пришлось установить целевую платформу проекта на x86, или я получил бы BadImageFormatException. Итак, этот новый проект настроен на компиляцию на x86, но все остальное установлено в AnyCPU.Можно ли смешивать x64/x86 в проекте C#?

После публикации WebService, я получаю сообщение об ошибке Unable to find ?.dll при вызове функции.

В любом случае, я могу добавить этот новый проект как x86 без необходимости устанавливать мой WCF на x86, или я делаю что-то неправильно, и это должно было сработать?

ответ

1

Возможно, но Все файлы двоичных файлов (.exe-s и .dll-s) должны использовать одну и ту же целевую платформу для работы. Вы не можете загрузить 32-разрядную DLL в 64-разрядный процесс или наоборот.

Если вы размещаете свой веб-сервис в IIS, целевая платформа пула приложений определяет, какие DLL-файлы вы можете загрузить.

Если вы экспортировали функции в свои неуправляемые DLL-файлы, ваши объявления P/Invoke также должны соответствовать целевой платформе - в частности, если вы передадите указатели, они должны быть правильно отображены на 32/64-разрядные указатели. (Обычно это). Заявления P/Invoke действительно превращаются в возможные проблемы, если вы поддерживаете обе платформы с одной базой исходного кода (скомпилированы в бинарные файлы для платформы).

В зависимости от того, что вы пытаетесь сделать, вам также придется иметь дело с обработкой конкретных ссылок на платформу. Этот question имеет более подробную информацию об этом.

Смежные вопросы