混合32位和64位托管程序集

时间:2012-02-15 11:19:16

标签: .net

全部,

我有一个在32位计算机上运行的.NET托管应用程序。 我可以将它编译为64位并将其移植到64位机器上。 但是,我依赖于一些32位程序集的第三方DLL。 我可以将64位和32位组件混合在64位机器上执行吗?

谢谢!

3 个答案:

答案 0 :(得分:4)

如果它们在同一个进程中运行,则不会。

OS上的进程无法加载不同“bit-ness”的程序集。一旦选定,所有组件都必须符合要求。如果您尝试将32位DLL加载到64位进程中,则通常会得到BadImageFormatException。反之亦然。

三个选项:

  1. 获取64位版本的问题DLL(理想)。
  2. 始终以32位独占运行(通常是选定的路径)。
  3. 在另一个进程中运行问题DLL并使用类似IPC的东西来跨过程边界进行交谈(极端,但我必须这样做一次)。
  4. 在64位操作系统上以32位运行没有任何内在错误,不要陷入认为速度较慢的陷阱。

答案 1 :(得分:0)

根据我自己的经验,没有。

我开发了一个依赖于32位iSeries COM库的系统,这是我无法控制的。遇到问题,并通过编译32位版本的应用程序来修复它们。

确保不要将任何CPU定位,而是将Visual Studio设置为编译为x86。

另请注意,生成的DLL和可执行文件的位置会略有不同。

e.g。

bin \ x86 \ Debug

而不是

BIN \调试

答案 2 :(得分:0)

不要忘记,如果你运行32位,可能不会慢,但你的内存可能不足。