2012-01-23 113 views
13

我有一個C#項目,其中包含對ScintillaNET的引用。不幸的是,ScintillaNET喜歡檢測機器的體系結構,並根據運行的體系結構加載本機DLL。這意味着我的項目必須預編譯爲x86和x64版本(由於上述檢測,我無法使用任何CPU)。編譯x86系統上的C#.NET x64二進制文件

問題是,我的構建服務器是x86-只。有沒有辦法在x86機器上以x64模式編譯.NET程序集?據我所知,切換隻是強制計算機加載所需架構的程序集,並且在編譯時並不實際輸出任何與架構相關的代碼,但是,在編譯服務器I上的Mono 2.10.6下編譯時得到錯誤,如:

「錯誤CS0016:無法寫入文件'ScintillaNet」,原因:AMD64"

我不能用CorFlags.exe改變PE頭,因爲這是一個基於Linux的,構建服務器。有沒有辦法做到這一點?

+5

沒有意義,位數由主啓動程序集(EXE)確定,而不是像ScintillaNET這樣的庫。使用AnyCPU。 –

+4

聽起來像他的項目是主要的啓動程序集。如果它在64位機器上以x86啓動,Scintilla會自行檢測,找到x64,嘗試將本機x64 dll加載到x86應用程序並失敗。真的,它是Scintilla中的一個錯誤,它沒有檢測到當前進程的體系結構,而是機器。 – antiduh

+0

根據mono文檔,'--aot'選項不會將平臺作爲參數。目前似乎不可能。 –

回答

2

我最終通過將項目切換回任何CPU來解決此問題。由於Scintilla只能在本機體系結構中工作而不管.NET設置如何,所以我必須在我的機器上以64位運行它。最初我打算強制架構爲32位以獲得編輯並繼續,這導致混淆了Scintilla檢測架構的方式。在現實中,Scintilla會強制自己到本地架構,但是如果你在Any CPU下構建並運行,.NET應用程序將正常工作。另外,由於我無法在32位模式下運行帶有Scintilla的.NET應用程序(對於編輯並繼續工作),我無法在我的機器上強制使用64位模式。

相關問題