簡體   English   中英

部署的64位C#應用程序無法加載非托管DLL

[英]Deployed 64bit c# application can't load unmanaged dll

我有一個用c#編寫的64位Web應用程序,該應用程序已部署到Windows Server 2008(IIS 7)和Windows Server 2012(IIS 8)上的IIS。

該應用程序的一部分涉及從c#代碼訪問非托管的c ++ DLL。 當我部署到IIS時,此調用失敗。 我得到經典:

試圖加載格式錯誤的程序。 (來自HRESULT的異常:0x8007000B)

我已經閱讀了有關該主題的許多主題,包括:

試圖加載格式錯誤的程序ERROR

即使平台相同,也“嘗試加載格式錯誤的程序”

但我不認為它們適用於

  1. 我有一個64位應用程序。
  2. 編譯為x64
  3. 部署為x64
  4. 我已經驗證它正在x64 IIS appPool下運行。
  5. enable32bitapplications設置為false
  6. C#dll導入和非托管dll都被編譯為64位。
  7. 我已經以發布和調試模式在服務器計算機上部署了IIS-沒什么區別。

應用程序中有32位dll,但是它們位於完全獨立的項目中,這些項目沒有被拋出錯誤的項目引用或引用。

有關其他信息,它在IIS Express中的我的本地計算機上以及通過IIS(Windows 7)部署時在我的本地計算機上都運行良好,因此某個地方存在斷開連接,我無法對其進行跟蹤。

附加信息:

非托管DLL確實依賴於:

  • 內核32.dll
  • Advapi32.dll
  • Crypt32.dll
  • User32.dll
  • 版本.dll

我意識到這些是32位的,我以為是32位的,但是在一台64位的機器上,它們都存在於System32中,所以我不確定...但是,如果是這樣,當將非托管DLL本身編譯為64位。

另外,為什么它對我本地有效?

另外,我(僅適用於踢踢和吃喝玩樂)將Enable32BitApplications設置為True,並且遇到相同的錯誤,因為我的項目是64位項目,並且引用了不能在32位進程中運行的64位非托管DLL。

對於非托管DLL,還有一個附加依賴性,它是c ++可再發行的dll。 在機器上該DLL的副本為32位,一旦我換出64位版本,就可以正常加載了。

從中學到的知識,必須存在DLL的所有依賴關系以及正確的Bitness。

您需要在IIS中將Enable32bitApplications設置為true。

暫無
暫無

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

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