WCF报错System.BadImageFormatException的解决方案
在一个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位下工作:
操作步骤:
- 打开vs命令提示符,注意不是cmd。
- 切换到WcfSvcHost.exe所在的目录..\Common7\IDE\
- 执行命令
corflags /32BIT+ /FORCE WcfSvcHost.exe
- 如果以后需要设置回工作在64位下,那么执行命令
corflags /32BIT- /FORCE WcfSvcHost.exe
WCF报错System.BadImageFormatException的解决方案