Как скомпилировать библиотеку служб 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-битном режиме, и вы не получите свою ошибку
Ответ 3
Я нашел пару хороших решений, которые решили все мои проблемы. Я зарегистрировал его здесь:
Я не могу скомпилировать стандартную "Библиотеку услуг WCF" в формате x86