2010-05-09 39 views
1

在一個項目中,我們依賴遺留系統及其作爲'x86'提供的.Net程序集,它們不提供'任何CPU'和/或64位單元。現在這個項目本身擁有大量數據,我們在整個項目中遇到了強制x86的侷限性,因爲這個程序集(如果我們使用64位/任何cpu,一旦x86在64位上加​​載,它將引發BadImageFormatException機)。引用一個64位的x86彙編程序

現在有一種(解決方法)在64位.net主機應用程序中使用x86程序集的方法嗎?對x86組件的微小依賴使得99%的項目受到嚴重限制。

回答

1

您可以使用Corflags.exe實用程序更改程序集的位數。使用Visual Studio命令提示符快捷方式,然後:

corflags /32bit- whateverthename.dll 

這是不是非常容易的工作,迫使x86的目標往往是做,因爲組件對非託管代碼的依賴關係,這只是在32位可用。通常是一個COM服務器。

在這種情況下,您唯一的解決方法是在自己的進程中運行程序集。您需要編寫一個託管程序,將您的Platform Target強制轉換爲x86。您需要使用.NET支持的一種進程互操作機制與主程序進行通信。套接字,命名管道,.NET Remoting,WCF。注意這不是特別快,當代碼通常從未處理的異常中死掉時,它會變得很脆弱。

+0

感謝您的corflags提示!寫一個主機/代理服務器也是我心目中的最終回落,但由於需要大量的轉換,我沒有真正期望的。 – 2010-05-09 14:28:55

0

您可以要求相關遺留系統的創建者爲您重新編譯它們的程序集。

如果它由您的公司擁有,或者公司擁有它沒有幫助(或者如果您不在意),您可以使用Reflector輕鬆進行反彙編,並使用一些工作重新編譯任何cpu或x64。

+0

根據什麼樣的庫它可能甚至不可能使用64位,但 – Joey 2010-05-09 13:41:56

+0

不幸的是,這不是一個選項。第三方供應商拒絕提供更新的程序集,並且像底層架構看起來那麼奇怪,我寧願不進行反彙編和重新編譯。我正在尋找一個'官方'的方式 – 2010-05-09 13:44:03

+0

該庫做了一個相當奇怪的「x86 .net程序集」> COM> java> corba path。基本上,.net程序集只是一個實際庫/ api的包裝,它以java .jar的形式提供,而.net進程啓動一個java進程,並且它們都通過com進行通信,而java部分執行實際的客戶端/服務器通信。我不能評論這個「建築」,但是由於包含了很多基石,我寧願不去碰它。請留下官方支持。 – 2010-05-09 13:50:42