在64位操作系统上提供32位.NET

时间:2012-08-04 19:57:43

标签: .net

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

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

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

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

示例:

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

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

PS:对不起,如果之前有人询问过。我不知道如何搜索这个特定的问题,我的谷歌也失败了。

1 个答案:

答案 0 :(得分:5)

  

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

即可。但是没有安装它的情况有点罕见。 Windows Server Core 2008 R2(可能是 Core 2012)支持WOW64作为单独的,可安装的,可移动的组件 - 包括.NET位。请获取look here以获取更多信息。

为了安装Server Core 2008 R2的WOW64组件,需要运行:

  

开始/ w ocsetup NetFx3-ServerCore-WOW64

服务器核心是我能够找到x64组件可用的唯一案例,但x86组件可能不是。如果你没有瞄准或支持服务器核心,那么我相信可以安全地假设x86位与x64位一起存在。