回答

10

CLR對/ ANYCPU選項有特殊的加載器支持。

如果你真的爲本土做到這一點,做到這一點的最好辦法是:

  1. 建立你的二進制的32位和64位
  2. 作爲構建的一部分32位二進制,包括64位二進制文​​件作爲資源
  3. 在32位機器上,只需運行32位二進制文​​件
  4. 在64位機器上,當32位二進制文​​件運行時,解壓縮64位位二進制資源,將其寫入磁盤,並從那裏運行

這就是Sysinternals工具的工作原理(將Process Explorer下載到64位機器上並運行它:您會看到它將procexp64.exe寫入磁盤,然後從那裏運行它)。這是一個黑客,但它的工作原理。

5

不AFAIK - 問題是,

  1. 你需要單獨的代碼;這適用於C#,因爲您生成的.NET IL將被轉換爲目標系統上的本機代碼
  2. windows PE格式只有一個圖像頭,並且沒有辦法鏈接到另一個頭以便將兩組代碼在同一個庫中。

您可以爲.EXE做的最好的事情是發佈一個32位.exe文件,檢查它是否運行WOW64,然後生成64位版本。但我不能想到庫的等價技巧 - 它必須首先匹配主機進程的位才能加載。

相關問題