.NET应用程序链接的是64位DLL,而不是我想要的32位。为什么?

时间:2019-01-17 19:39:29

标签: c# .net windows dll

我采用了需要转换为32位的代码库(因此我可以使用外部32位驱动程序)。我将项目Platform Target设置为x86(下图)。都可以正常编译,但是由于某种原因在运行时会崩溃,并生成以下输出An unhandled exception of type 'System.BadImageFormatException' occurred in mscorlib.dll

Project Platform Target

我使用了Dependency Walker,发现链接的某些DLL是64位,位于\ System32 \中,当我希望将32位DLL位于“ SysWOW64”中时。 (下面的输出)。从输出中可以看到目录不正确,并且它们确实是64位DLL。我以为这都是由Windows管理的?

enter image description here

所以我的问题是,如何强制应用程序转到\ SysWOW64 \中的32位DLL?这是Windows配置设置还是项目设置?或者如何进一步诊断问题?

1 个答案:

答案 0 :(得分:-1)

我认为您需要将平台下拉列表从活动(任何CPU)设置为32位。

Active solution platform VS Project Platform VS Platform target

根据上述情况,对于Active(任何CPU),将采用JIT来适应其运行的平台,因此,在32位平台上使用x86,在64位平台上使用x64。

另外,可能需要配置MSIL:

https://stackoverflow.com/a/10196549/1666620

  
      
  1. 转到“构建|配置管理器”菜单项。
  2.   
  3. 在列表中找到您的项目,在“平台”下它将显示“ Any CPU”
  4.   
  5. 从下拉菜单中选择“任何CPU”选项,然后选择
  6.   
  7. 在该对话框中,从“新平台”下拉列表中选择x86,并确保在“从以下位置复制设置”下拉列表中选择了“任何CPU”。
  8.   
  9. 点击确定
  10.   
  11. 您将要同时为调试和发布配置选择x86。
  12.