2009-02-18 77 views
3

時需要86了.NET依賴鏈我們有使用p4.net幾個項目,有管理的DLL,而這又依賴於p4dn.dll,一個32位的非託管的DLL。這在x64系統上有問題,所以我不得不去每個使用p4.net的項目,並將其處理器類型設置爲x86。如何構建

如果我理解正確的問題,那就是當.NET加載一個exe文件,它會檢查清單,如果沒有它什麼是最好的處理器類型。然後,當它運行到32位的DLL,它吧。

我可以去使用p4.net每個項目並將其標記爲32位。但是我們有很多這些。另外,人們會繼續製作新的並忘記設置32位,然後在別人嘗試在x64上使用它時,我們會再次遇到這個問題。

我的問題是:有沒有辦法讓.NET會自動加載使用p4dn.dll 32位的任何應用程序?如果失敗了,IDE是否有辦法檢測到這一點並且無法構建?

或者是有可能使一個.manifest的文件,使任何應用程序使用它們在32位會自動運行,我可以把旁邊的p4api或p4dn.dll?

回答

2

如果您完全沒有其他選擇,則可以使用標記作爲自動構建腳本的一部分,以將所有.NET dll標記爲x86 - corflags /32bit+ file.dll。 儘管我認爲適當的開發者教育是更充分的解決方案。

1

CLR只在從GAC加載程序集時才檢查平臺類型。我猜p4dn.dll包含在應用程序根文件夾下,所以我認爲你的邏輯錯誤。

看來,當它了WoW64模式的運行,你的應用程序在64位模式下運行本機可p4dn.dll不能使用。我認爲最好的方法是編譯所有針對x86(32)平臺的項目。或者將它分解成部分,所以p4dn.dll調用者總是以WoW64模式運行。

此外,您應該聯繫p4net開發人員以添加完整的x64平臺支持。

+0

不應該是「我認爲最好的方法是編譯所有針對_x86_平臺的項目」?從我的理解,這是必要的,有一個應用程序運行在WO64模式。 – 2009-02-18 21:13:22

0

我不知道有什麼辦法自動做到這一點。我會建議你做以下幾點:

  • 訓練你的開發人員,
  • 加入這個話題您的內部知識基礎和
  • 添加x64平臺到測試環境

另外,您可能會想到編寫一個VS加載項來檢查正確的目標平臺。但隨後可能會動態創建COM組件...