两种缘由:es6
第一种为程序的运行以平台系统位数不匹配,第二种则是该死的VS整出来的...网站
通常在下面三种情景下会发生.spa
1.64位系统上C#调用32位的C++ *.dll调试
2.64位系统上IIS发布含有32位的 *.dll应用程序时orm
3.64位系统上编写C++ *.dll,在64位系统上经过 C#调用 ,可能成功,也可能失败,失败就报BadImageFormatException 异常,也是最二的一种状况.是由该死的VS整出来的blog
解决方法以下:资源
1.VS在64位系统下面,编译调试某个C++的API的时候,报错:未处理BadImageFormatException 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)开发
详见下图:get
其缘由是该API是在32位系统下面开发的,在64位系统上面开发编译的时候须要将生成的目标平台设为X86。it
方法是:
在右边的“解决方案资源管理器”里,右键该项目点击属性。在属性窗口里选择“生成”——“目标平台”下拉里选中“X86"便可。见下图:
而后保存从新编译
缘由:程序集之间的通信要么全是64位环境下的,要么全是32位环境下的。不能混编访问。否则会出现“试图加载格式不正确的程序”的错误;
解决办法是把发布网站的程序池开通32位兼容性便可,以下图:
3.若是上面的没有解决,那就是VS中C#工程的问题,打开对应的工程文件(*.csproj),以下图<Prefer32Bit>false</Prefer32Bit>节点
下面是MSDN的解释:
CSharpProjectConfigurationProperties6.Prefer32Bit 属性
获取或设置一个标志,指示是否首选的 32 位平台。
命名空间: VSLangProj110
程序集: VSLangProj110(在 VSLangProj110.dll 中)
C#
bool Prefer32Bit { get; set; }
属性值
返回表示 32 位首选项的标志。 返回true若是 32 位是首选。 不然,返回false。