.net 在调试和发布配置中以完全相同的方式构建的应用程序不会';Win7:BadImageFormatException无法在版本中工作
我正在Win7 x64机器上开发一个应用程序 有一些代码可以调用外部.dll文件。.dll是为32位机器构建的。我遇到的问题是,在.net 在调试和发布配置中以完全相同的方式构建的应用程序不会';Win7:BadImageFormatException无法在版本中工作,.net,configuration,badimageformatexception,.net,Configuration,Badimageformatexception,我正在Win7 x64机器上开发一个应用程序 有一些代码可以调用外部.dll文件。.dll是为32位机器构建的。我遇到的问题是,在Debug配置的调试器中运行应用程序时,它工作正常。只要我切换到Release,任何进入方法的条目都会导致.dll调用失败 An unhandled exception of type 'System.BadImageFormatException' occurred in MyCool.exe Additional information: is not a v
Debug
配置的调试器中运行应用程序时,它工作正常。只要我切换到Release
,任何进入方法的条目都会导致.dll调用失败
An unhandled exception of type 'System.BadImageFormatException' occurred in MyCool.exe
Additional information: is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)
Release
和Debug
配置都是相同的,应用程序是为x86构建的。此问题仅在Windows 7计算机上发生。我们运行XP的客户没有问题。诚然,我们没有运行xpx64的客户,因此我无法验证这一点
以下是我的解决方案配置的图像:
我已将平台:
选项更改为所有可能的组合,但它仍然不起作用。Debug
配置中是否有隐藏的东西
编辑:我知道了,但我真的不理解这个问题
在项目属性中的每个项目的Build
选项卡(Compile
tab用于VB项目)中,我必须将Target CPU
设置为x86,而不是AnyCPU
也许这是另一个问题,但是:为什么?在每个项目的基础上,将整个解决方案的平台设置为x86与将目标CPU设置为x86有什么区别。另外,在上图中:
Platform
字段的用途是什么呢?这是因为任何CPU都将以64位运行,但您的DLL可能被编译为32位DLL。不能从64位可执行文件交叉调用32位DLL
在将应用程序设置为x86时,这将强制将其编译(并运行)为32位应用程序。是的,这与平台设置无关。名称(x86)和AnyCPU都不相关。只有“项目+属性”、“生成”选项卡中的设置才重要。。。。。。所以那么平台做什么呢?什么都没有。它只对C++项目很重要。如果这是一个大问题,它会影响所使用的编译器和链接器。NET编译器是平台无关的,因为MSIL是。这是难以置信的误导,但我想这是有道理的。。。