在一个WCF Service Library中,如果引用了一些32bit的dll,我们称这个WCF Service Library依赖于x86。在调试过程中,也必须将其工程编译属性调整为x86。但如果我们的编译环境是64位,运行可能就会报错BadImageFormatException:

这是因为WCF Service Library是一个dll,必须放在容器中执行,在vs调试中使用了WcfSvcHost.exe来作为一个临时容器。它位于vs安装目录下的Common7\IDE\WcfSvcHost.exe。由于系统环境是64位,所以安装vs的时候就会自动设置WcfSvcHost.exe为64位,所以当WcfSvcHost.exe运行32位dll时才会报错。解决这个问题可以使用Corflags命令.

corflags命令的详细介绍可以参考这里。它可以将程序设置在32位下工作:

操作步骤:

  1. 打开vs命令提示符,注意不是cmd。
  2. 切换到WcfSvcHost.exe所在的目录..\Common7\IDE\
  3. 执行命令corflags /32BIT+ /FORCE WcfSvcHost.exe
  4. 如果以后需要设置回工作在64位下,那么执行命令corflags /32BIT- /FORCE WcfSvcHost.exe