Как мне скомпилировать сервисную библиотеку WCF в 32-битном режиме? - PullRequest
11 голосов
/ 21 сентября 2010

Я могу ссылаться на код Matlab из проекта на основе x86, но не из проекта x64.

Я могу построить Службу WCF как «Любой ЦП», но не x86. Когда я пытаюсь собрать только как x86, выдает следующую ошибку:

---start error---
System.BadImageFormatException: Could not load file or assembly 'file:///D:\backtest\WcfServiceLibrary.dll' or one of its dependencies. An attempt was made to load a program with an incorrect format.
---end error---

Таким образом, я застрял: как же я могу предоставлять вызовы Matlab через WCF? Это как какая-то странная форма разработчиков XOR.

Какие-либо идеи о том, как (а) скомпилировать библиотеку служб WCF в 32-разрядном режиме или (б) обойти эту проблему?

У меня Win7 x64, MSVS 2010.

Ответы [ 3 ]

26 голосов
/ 16 марта 2012

Ваша проблема на самом деле - тестовый клиент WCF, жалующийся на то, что ваша библиотека служб WCF является 32-разрядной. Это связано с тем, что по умолчанию тестовый клиент WCF всегда работает в 64-битном режиме.

Я нашел следующие шаги в этом блоге , в котором тестовый клиент WCF работает в 32-битном режиме, и поэтому вы не увидите опубликованную ошибку.

  1. Скопируйте WcfSvcHost.exe и WcfTestClient.exe из C: \ program files (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ IDE в локальный каталог. Сохраните резервную копию этого файла, конечно.
  2. Запуск командной строки Visual Studio 2010 (одна из ссылок в меню «Пуск» -> Visaul Studio 2010)
  3. "cd" в каталог, где находится ваша копия WcfSvcHost.

  4. Выполнить команду «corflags / 32BIT + / FORCE WcfSvcHost.exe»

  5. Выполнить команду «corflags / 32BIT + / FORCE WcfTestClient.exe»

  6. Скопируйте файлы туда, где вы их нашли.

Теперь ваши WcfSvcHost и WcfTestClient будут работать в 32-битном режиме, и вы не получите ошибку

9 голосов
/ 21 сентября 2010

WcfServiceLibrary - это DLL, поэтому она должна быть построена как «Любой ЦП». Только EXE-проекты, в которых размещены все остальные библиотеки DLL, должны быть помечены как «x86» или «x64», как требуется. Какой проект является EXE в этом случае?

2 голосов
/ 21 сентября 2010

Я нашел пару хороших решений, которые решили все мои проблемы. Я задокументировал это здесь: Я не могу скомпилировать стандартную "библиотеку служб WCF" в формате x86

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...