2010-05-01 93 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