x64应用程序可以使用x86程序集 - 反之亦然?

时间:2010-04-23 13:19:36

标签: .net dll x86 64-bit x86-64

我的应用程序是作为x64应用程序构建的。移动到VS2010后,我得到some problems,这似乎与引用的dll中的某些x64 / x86不匹配有关。现在我转向目标.NET4,我得到更多similar problems

我的问题是:关于混合x64和x86,我需要采取哪些预防措施。它可以完成吗?我认为x64应用程序应该能够毫无问题地使用x86 dll。没有?另一种方式呢? x86应用程序可以引用x64 dll - 只要它在x64平台上运行吗?我需要注意哪些陷阱?

2 个答案:

答案 0 :(得分:34)

不,64位进程只能加载64位DLL,而32位进程只能加载32位DLL。你可能想到的是64位操作系统可以运行32位进程

.NET的主要问题是 - 在VS2010之前 - 可执行项目默认为“AnyCPU”,这意味着它将以其运行的操作系统的“本机”格式加载(因此32位版本为32位)对于64位版本的Windows,Windows和64位)。问题在于,如果你在32位Windows上测试你的应用程序(比如说),那么如果加载32位DLL并尝试在64位Windows上运行它可能会中断。

在VS2010中,他们默认将所有可执行项目默认为“x86”(即32位),这(大部分)可以缓解问题。

答案 1 :(得分:5)

您可以使用WOW32仿真在64位操作系统上运行x86应用程序。我遇到的一些陷阱 - 你不能在同一个过程中混合和匹配32/64。因此,如果您打算将IIS作为64运行,则所有程序集都需要为64,否则您将必须以32位模式运行。 64位比其他应用更有助于某些应用。运行SQL服务器的64位版本提供了优于32位版本的几个优点,最大的优点是,您可以在目标服务器上安装超过4 GB的内存,并且SQL将能够使用超过4 GB的内存。它对IIS没有多大好处,因为IIS通常不能使用超过3 GB的内存。我的建议是尽可能确保你的SQL server / os / version是64。它不会成为一个。如果其他服务器是64,那么巨大的差异,但通常更容易使用并找到32位版本。