簡體   English   中英

.NET應用程序鏈接的是64位DLL,而不是我想要的32位。 為什么?

[英].NET application is linking 64-bit DLLs instead of 32-bit like I want. Why?

我采用了需要轉換為32位的代碼庫(因此我可以使用外部32位驅動程序)。 我將項目Platform Target設置為x86(下圖)。 一切都可以正常編譯,但是由於某種原因在運行時會崩潰並產生以下輸出An unhandled exception of type 'System.BadImageFormatException' occurred in mscorlib.dll

項目平台目標

我使用了Dependency Walker,發現當我希望將32位DLL放在“ SysWOW64”中時,鏈接到其中的某些DLL是位於\\ System32 \\中的64位。 (下面的輸出)。 從輸出中可以看到目錄不正確,並且它們確實是64位DLL。 我以為這都是由Windows管理的?

在此處輸入圖片說明

所以我的問題是,如何強制應用程序轉到\\ SysWOW64 \\中的32位DLL? 這是Windows配置設置還是項目設置? 或者如何進一步診斷問題?

我認為您需要將平台下拉列表從活動(任何CPU)設置為32位。

主動解決方案平台VS項目平台VS平台目標

根據以上所述,對於Active(任何CPU),組件將是JIT,以適合其運行的平台,因此,在32位平台上使用x86,在64位平台上使用x64。

此外,可能有必要配置MSIL:

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

  1. 轉到“構建|配置管理器”菜單項。
  2. 在列表中找到您的項目,在“平台”下它將顯示“ Any CPU”
  3. 從下拉列表中選擇“任何CPU”選項,然后選擇
  4. 在該對話框中,從“新平台”下拉列表中選擇x86,並確保在“從以下位置復制設置”下拉列表中選擇了“任何CPU”。
  5. 點擊確定
  6. 您將要同時為調試和發布配置選擇x86。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM