32

我的应用程序构建为 x64 应用程序。迁移到 VS2010 后,我遇到了一些问题,这些问题似乎与引用的 dll 中的某些 x64/x86 不匹配有关。现在我正在转向 .NET4,我遇到了更多类似的问题

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

4

2 回答 2

37

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

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

在 VS2010 中,他们默认所有可执行项目为“x86”(即 32 位),这(在大多数情况下)缓解了这个问题。

于 2010-04-23T13:25:49.153 回答
7

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

于 2010-04-23T14:27:35.667 回答