2012-10-29 153 views
2

我的項目結構如下:WCF服務庫:32位DLL BadImageFormatException

myApp 
-->WCFSerLib (Any CPU Deafult application) 
-->ClassLib1 (Any CPU) 
-->ClassLib2 (x86) 

當我嘗試執行我的應用程序Unfortuantely正在此提示以下錯誤。

System.BadImageFormatException was unhandled by user code 

無論如何,我可以實現上述目標嗎?

感謝

+0

你使用的是nativ dll文件嗎? – rekire

+0

是的,我正在使用winscard.dll。 –

回答

0

謝謝你們,

問題是與winscard.dll它使用的INT32 。所有我改變了與Int64的更換的Int32手柄。

3

如果我猜的沒錯比你試圖在x64 mashine使用一個x86 DLL。使用AnyCPU,.net框架將自動使用currient體系結構。

因此,您的應用程序作爲x64應用程序運行,它嘗試加載失敗的x86庫。所以,你有兩個選擇:

  • 設置目標architeture的x86
  • 添加/創建64 libary

如果你有兩個verions(X86/X64)在某處你envireonment變量操作系統會自動選擇正確的一個。

+0

我不認爲WCFService庫支持x86 –

+0

你試過嗎? – rekire

+0

Icant將它設置爲x86,因爲WCFLibrary只允許x64 ..第二點已經創建了Classlib2.dll 64位庫,但是相同的底層相關DLL在32位。 –

1

我想你正在一個x64系統上運行你的應用程序。
以這種方式混合平臺類型將導致BFE在WCFService庫或ClassLib1中調用ClassLib2中的方法時,因爲前兩者作爲64位進程運行,而後者被迫以x86模式運行。

您應該在每個項目上設置相同的平臺類型。
當然,WCFService庫只支持AnyCPU,所以對每個項目使用AnyCPU平臺類型都是有意義的。

如果您的ClassLib2需要使用32位庫(winscard.dll),並且該庫沒有64位版本,那麼我認爲您應該使用WCF服務應用程序而不是服務庫。 See this question

+0

約定對我來說,將'CLassLib2'設置爲任何CPU類型的唯一問題是我在這個classlib2.dll中使用了winscard.dll,這是由於某些原因給我64位的問題。 –

+0

我只是在尋找這個,我不知道是否有該DLL的64位版本。如果沒有,那麼我認爲你應該使用WCF服務應用程序而不是服務庫。 http://stackoverflow.com/questions/375576​​1/i-cant-compile-a-standard-wcf-service-library-in-x86-format – Steve

+0

我什至認爲相同的史蒂夫..最後我可以主持一個WCF服務應用程序作爲一個Windows服務? –