这是确切的情况。我有一个来自第三方供应商的x86程序集,我想与NServiceBus一起使用。但是,当NServiceBus尝试扫描程序集时,我很快就会遇到一连串的BadImageFormat异常。这是我可以通过使用x86版本的NServiceBus来解决的问题,但是我必须更改所有其他引用的库以执行相同的操作,其中一些依赖于x64程序集。
我能想到的最干净的解决方案是使用corflags.exe将第三方程序集修改为AnyCPU。这样我就不必将许多其他引用的库中的任何一个修改为x86。到目前为止,这是完美的。
但是,我已经被警告过,如果第三方库引用任何在x86和x64中具有不同实现的库,则可能会出现问题。
所以我的问题是,x86和x64 .NET Framework库的IL是否有任何区别,例如,系统的IL。* x64等于系统的IL。* x86?
据我所知,平台目标只是开发人员设置的偏好,并不影响实际产生的IL;我的解决方案是使用corflags.exe转换第三方程序集应该是安全的,只要.NET Framework在其x64和x86程序集中也使用相同的IL。是这种情况吗?
每个评论问题:第三方库引用(我知道这是通过反编译第三方库。)
并且版本为4.0.0.0。
答案 0 :(得分:1)
无论.NET进程使用什么位数,.NET Framework都能正常工作。 C#编译器不关心位数。它所做的就是设置可以更改的PE标志。
显然,您要修改的第三方库可能取决于具有固定位数的库或仅包含Debug.Assert(IntPtr.Size == 4);
的库的位数。这就是全部。
我被警告说,通常将带有corflags的x86转换为x64程序集可能会导致问题。
真。
System.Collections程序集就是一个例子。
不确定来自哪里......错误。