【问题标题】:Availability of 32-bit .NET on a 64-bit OS32 位 .NET 在 64 位操作系统上的可用性
【发布时间】:2012-08-04 19:57:43
【问题描述】:

TLDR:在 64 位操作系统上安装 .NET 时,32 位组件是否始终存在?

我曾经将我的应用程序 (IronScheme) 完全编译为 AnyCPU。虽然这适用于所有平台,但 64 位 JIT 编译器对我来说似乎太慢了(启动速度慢了大约 550%,一般来说慢了大约 25%)。启动缓慢可以通过 NGEN'ng 我的程序集来解决,并且实际上这样做可以将启动时间再提高 500%。这使 64 位的启动时间(3700 毫秒对 140 毫秒)提高了大约 2600%。当 32 位和 64 位都是 NGEN 时,启动时间是相同的,但 32 位在运行时仍然表现更好。

现在在大多数情况下根本不需要 64 位,我认为在可执行文件中定位 x86 将是最好的通用解决方案(所有其他程序集都针对 AnyCPU,但据我所见,可执行文件确定它的去向)。所以我们的想法是有 2 个启动可执行文件,一个针对 x86,另一个针对 x64(或 MS 称之为 amd64)。

在 32 位操作系统上安装时,我可以确定不存在 64 位组件。但是相反的情况呢? .NET 安装程序是否同时安装 32 位和 64 位组件?这很重要,因为如果目标与运行时不匹配,NGEN'ng 非 AnyCPU 程序集将失败。

例子:

“编译 IronScheme.Console.exe 时出错:此版本与您运行的 Windows 版本不兼容。”

另外请注意,我的应用程序是默认为 .NET 2 和 VS2008 构建的,因此新的 AnyCPU (32-bit preferred) 选项(在 VS2012/.NET 4.5 中)目前不适合我。

PS:抱歉,如果之前有人问过这个问题。我不知道如何搜索这个特定问题,我的 Google fu 也让我失望了。

【问题讨论】:

  • 我想我可以在安装程序中进行所有这些检查,但如果不需要,我宁愿不要:)

标签: .net


【解决方案1】:

32 位组件是否始终存在于 64 位操作系统上?

。但是没有安装的情况比较少见。 Windows Server Core 2008 R2(可能还有 Core 2012)支持 WOW64 作为单独的、可安装和可移除的组件 - 包括 .NET 位。请发送look here 了解更多信息。

要为 Server Core 2008 R2 安装 WOW64 组件,需要运行以下命令:

启动 /w ocsetup NetFx3-ServerCore-WOW64

Server Core 是我能够找到 x64 组件可用的唯一情况,但 x86 组件可能不可用。如果您不针对或不支持服务器核心,那么我相信可以安全地假设 x86 位将与 x64 位一起存在。

【讨论】:

  • @leppie 发现相反的证据。
  • 感谢您的努力。我同意,假设是安全的。
猜你喜欢
  • 1970-01-01
  • 2011-12-18
  • 2011-04-17
  • 2011-07-07
  • 2013-08-29
  • 2012-07-26
  • 2012-05-14
  • 2015-09-26
  • 1970-01-01
相关资源
最近更新 更多