如何在32位模式下编译WCF服务库?

时间:2010-09-20 20:01:03

标签: wcf

我可以从基于x86的项目中引用Matlab代码,但不能从x64项目引用。

我可以将WCF服务构建为“任何CPU”,但不能构建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---

因此,我陷入困境:我如何通过WCF提供Matlab调用?它就像一些奇怪的开发者XOR。

关于如何(a)以32位模式编译WCF服务库,或(b)解决问题的任何想法?

我有Win7 x64,MSVS 2010。

3 个答案:

答案 0 :(得分:24)

您的问题实际上是WCF测试客户端抱怨您的WCF服务库是32位。这是因为默认情况下,WCF测试客户端始终以64位模式运行。

我在此blog上找到了以下步骤,这使得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. 将文件复制回您找到的位置。

  7. 现在您的WcfSvcHost和WcfTestClient将以32位模式运行,您将不会收到错误

答案 1 :(得分:9)

WcfServiceLibrary是一个DLL,因此应该构建为“Any CPU”。只有托管所有其他DLL的EXE项目需要根据需要标记为“x86”或“x64”。在这种情况下哪个项目是EXE?

答案 2 :(得分:2)

我找到了几个解决我所有问题的好方案。我在这里记录了它: I can't compile a standard "WCF Service Library" in x86 format