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

Я могу ссылаться на код 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.

Ответ 1

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

Ответ 2

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

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

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

  • Выполните команду "corflags/32BIT +/FORCE WcfSvcHost.exe"

  • Выполните команду "corflags/32BIT +/FORCE WcfTestClient.exe"

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

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