2012-05-28 19 views
3

我有兩個第三方組件。一個針對x86目標編譯,另一個針對任何CPU。 有沒有辦法從相同的應用程序中使用它們。如何從同一個EXE應用程序引用x86和ANY CPU組件?

現在我的應用程序編譯成功,但無法運行。我試圖爲x86和任何CPU構建我的EXE文件,但沒有運氣。 我可以使用corffgs更改目標平臺位,但程序集已簽名,我不想更改它們的簽名。

任何人都可以幫忙嗎?

+0

'無法運行'有點含糊。你能解釋一下,如果你有一個例外,那麼信息是什麼? – Steve

+0

嗨史蒂夫,它是'BadImageFormatException' – vyakhir

+0

如果爲AnyCPU構建的那個目標x86不起作用,那麼你有一個無法解決的問題。您需要聯繫DLL所有者以獲得支持。 –

回答

9

您可以引用它們 - 但只有當入口.exe程序集設置爲x86 時,它纔會運行,並將其設置爲任何CPU並在x86機器上運行。對於IIS託管的進程,位數由IIS本身決定。

舉例來說 - 我剛剛創造了這個VS2010的解決方案:https://docs.google.com/open?id=0Bw_NnV9fhgmgSGxGOEZXSnVsd1k

控制檯應用程序可以是x86/APU任何和引用兩個庫 - 一個是86,一個是任何CPU。

如果您將exe設置爲x86並在x64上運行,那麼它工作正常(顯然它適用於x86沒有問題)。但是,如果您將exe設置爲Any CPU並在x64上運行,它將崩潰(使用BadImageFormatException)。再次,在x86上運行它仍然可以工作。

入口組件的味道決定了過程的位數;因此可以加載任何程序集的預期位數。

就你而言,你可能關注的是裝配不一定是問題 - 它是裝配他們參考。這個例外可能會告訴你更多。

+0

它不在我的情況下運行。當我構建用於x86平臺的EXE時,x86程序集中的類可以稱爲「好」,但是從「any cpu」程序集實例化類會引發異常。 如果我建立'任何cpu' - 反之。 – vyakhir

+0

那麼我的猜測是那些衛星庫中的一個試圖加載一個具有快速x64/x86引用(無論哪個與進程的位數不兼容)的程序集。查看我在更新後的答案中提供的壓縮解決方案 - 它包含對此確切場景的簡化。 –

+0

謝謝安德拉斯!我檢查了你的解決方案,它工作得很好。 看起來像一個(或兩個)我正在使用的程序集調用一些特殊的Win API ... – vyakhir

相關問題