2010-05-01 131 views
4

如果某個應用程序中引用的某些程序集僅使用32位編譯,將加載.NET(64位與32位)的哪個版本(而不是AnyMachine)設置?如果至少有一個引用的程序集只被編譯爲32位,應用程序仍將以64位運行還是將被強制以32位運行?該應用程序正在運行.NET 3.5。使用64位與32位程序集的.NET版本

回答

4

位岬通過在EXE的平臺目標設置決定運行。沒有任何機制可以確保引用僅32位程序集的EXE也將被強制以32位模式運行。程序集將無法加載BadImageFormatException。

如果你的程序依賴於這樣一個DLL,那麼你必須必須強制你的EXE項目上的Platform Target從AnyCPU到x86。

+0

它會在應用程序開始時或程序集被使用時失敗嗎? – user31673 2010-05-01 18:20:39

+2

使用時。這可能接近開始。 – 2010-05-01 18:45:02

5

該應用程序將被強制爲32位

+1

如果程序集是動態加載的,並且進程是64位,則32位程序集將無法加載。 – EricLaw 2010-05-01 17:38:50

+0

如果引用的程序集編譯爲AnyCPU,但是使用非託管DLL,那麼如果不提供64位版本的非託管DLL,它將無法運行。 – 2010-05-01 17:40:33

+0

不是由進程的位數決定的主要的可執行文件,如果該模塊引用不同位元的程序集,那麼這些程序將無法加載,不會強制該進程使用不同的位?例如,如果創建可執行文件並將其編譯爲AnyCPU,但它引用了一堆32位程序集,則該進程將在32位操作系統上正常運行,但無法在64位操作系統上加載其他程序集? – 2010-05-01 18:15:22