x86与x64 .NET Framework库的IL有什么区别吗?

时间:2015-04-07 20:58:38

标签: c# .net assembly implementation cil

这是确切的情况。我有一个来自第三方供应商的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。是这种情况吗?

每个评论问题:第三方库引用(我知道这是通过反编译第三方库。)

  • 系统
  • System.Runtime.Serialization
  • System.Runtime.Serialization
  • mscorlib程序
  • (他们的依赖)

并且版本为4.0.0.0。

1 个答案:

答案 0 :(得分:1)

无论.NET进程使用什么位数,.NET Framework都能正常工作。 C#编译器不关心位数。它所做的就是设置可以更改的PE标志。

显然,您要修改的第三方库可能取决于具有固定位数的库或仅包含Debug.Assert(IntPtr.Size == 4);的库的位数。这就是全部。

  

我被警告说,通常将带有corflags的x86转换为x64程序集可能会导致问题。

真。

  

System.Collections程序集就是一个例子。

不确定来自哪里......错误。