根据 MSDN 文档,
实际上,还有一个额外的情况——从在x64模式下运行的程序集加载为x86构建的程序集。也许这已经包含在“无效的程序集”语句中了,我不知道。但这是异常的合理原因。
好吧,在.NET 4.5中不会出现这种情况!我有一个.NET 4.5 WPF应用程序,可以加载不同的应用程序,出于某种原因。它正在构建为任何CPU,并在x64 Win 7上启动。我一直在测试一个可执行文件,它是为.NET 4.0 x86构建的,而且工作得很好。但是当我把我的应用程序切换到.NET 4.0时,它就开始在
所以,我的问题是,我错过了什么吗?如果没有,那么他们是如何做到的——在.NET 4.5中从x64进程加载x86程序集?我在这一点上缺乏一些理解。
更新
public static Assembly LoadFrom(string assemblyFile)
如果出现BadImageFormatException
,则抛出异常。
assemblyFile is not a valid assembly.
-or-
Version 2.0 or later of the common language runtime is currently loaded
and assemblyFile was compiled with a later version.
实际上,还有一个额外的情况——从在x64模式下运行的程序集加载为x86构建的程序集。也许这已经包含在“无效的程序集”语句中了,我不知道。但这是异常的合理原因。
好吧,在.NET 4.5中不会出现这种情况!我有一个.NET 4.5 WPF应用程序,可以加载不同的应用程序,出于某种原因。它正在构建为任何CPU,并在x64 Win 7上启动。我一直在测试一个可执行文件,它是为.NET 4.0 x86构建的,而且工作得很好。但是当我把我的应用程序切换到.NET 4.0时,它就开始在
Assembly.Load
方法上崩溃!所以,我的问题是,我错过了什么吗?如果没有,那么他们是如何做到的——在.NET 4.5中从x64进程加载x86程序集?我在这一点上缺乏一些理解。
更新
感谢Hans Passant,我已经找到了我的错误。实际上,Assembly.Load
的行为没有任何不同。原来我没有注意到项目设置中的Prefer 32-bit
选项(或.csproj文件中的Prefer32Bit标记)。这就是为什么我的.NET 4.5进程以32位模式运行的原因。当我创建WPF .NET 4.5项目时,此设置为true。然后,当我切换到.NET 4.0时,它变得无效,因为.NET 4.0中没有这样的选项。当我再次切换回.NET 4.5时,它变成了false,我猜是为了兼容性目的。