2017-03-04 42 views
2

我看到下面的錯誤平臺架構:如何運行csi.exe時設置csi.exe

System.BadImageFormatException:無法加載文件或程序 「xyz.dll」或它的一個依賴。不是有效的Win32 應用程序。 (異常來自HRESULT:0x800700C1)

在Visual Studio編譯提出了警告,但編譯和運行流暢:

有正在建造的項目 的處理器架構之間的不匹配「MSIL」以及參考文獻 「xyz」,「x86」的處理器體系結構。這種不匹配可能會導致運行時失敗。請 考慮通過配置管理器更改項目 的目標處理器體系結構,以便在您的項目和參考之間對齊處理器 體系結構,或採用 依賴於處理器體系結構與您的目標處理器體系結構匹配的處理器體系結構項目。

因此,似乎我必須指定處理器架構時運行csi.exe?怎麼做?

+2

這是不是很清楚你的設置是什麼。你在VS中建立一個項目和使用CSI之間有什麼關係?什麼是xyz.dll? xyz.dll是否包含需要在x86模式下運行的代碼? – NineBerry

回答

3

您的裝配xyz.dll被編譯爲僅在32位進程中運行。這可能是一個很好的原因(例如加載另一個本地dll,只有32位代碼可用)。在這種情況下,請使用下面介紹的解決方案。這也可能是沒有理由的。在這種情況下,更改xyz.dll的目標平臺。


程序CSI.exe(C#編譯器互動)是建立在一個方式,以便它會在Windows的32位版本,32位可執行文件運行,它將運行在64位版本的64位可執行文件視窗。

當作爲64位可執行文件運行時,它將無法加載內置僅在32位進程中運行的組件(如您的xyz.dll)。


爲了改變這種情況,你可以創建一個版本CSI.exe的運行,因爲即使在Windows 64位版本的32位進程。請執行以下步驟:

  1. 找到文件csi.exe,在同一目錄中複製它,並將副本重命名爲csi32.exe。
  2. 找到文件CorFlags.exe:您可以在類似 「\程序文件(x86)\的MSBuild \ 14.0 \斌\ csi.exe C」 的路徑找到csi.exe。你可以找到CorFlags.exe類似的路徑爲 「C:\ Program Files文件(x86)的\微軟的SDK \的Windows \ v10.0A \ BIN \ NETFX 4.6.2工具\ CorFlags.exe」
  3. 打開一個命令行窗口管理員。
  4. 使用用於兩個可執行文件的正確路徑執行以下命令

    C:\路徑\至\ CorFlags.exe/32位+ /力C:\路徑\至\ csi32.exe

您現在可以在csi的地方使用csi32.exe。exe來運行需要僅在32位版本中可用的程序集/ dll的腳本。