Microsoft.NET\Framework和Microsoft.NET\Framework64有什么区别?

15
我想知道.NET模式x86和x64之间的区别。 1. 两个模式有什么区别? 2. 我可以编译我的库,例如使用.NET x64和.NET x86吗? 3. 如果我选择x64而不是x86,对我是否有任何影响? 4. .NET x64的优势是什么? 5. 如果我想使用.NET x64,我需要安装特殊的东西吗?

2
通常情况下,您不需要明确地为32位或64位编译您的库,而是选择“任何CPU”,并让目标机器(或您的主要应用程序)选择运行哪个版本。 - Uwe Keim
2
如果您选择一种模式,应用程序将更轻便,但无法在另一个平台上运行... - ykatchou
3个回答

17

问题比较复杂,我会尽量简单化:

  1. 任何 .Net 应用程序都可以一次编译为 x86(32 位)和 x64(64 位)。实际上,默认情况下就是这样。您可以通过在项目属性的构建选项卡中更改目标 CPU 来更改此设置。支持的目标包括 "Any"(将根据操作系统支持 JIT 即时编译到 32 或 64 位),"x86" 将编译为可在所有平台上运行的 32 位,而 "x64" 则编译为只能在 64 位平台上运行的 64 位。

  2. 是的,请参见上面。还要注意,有时会执行第二级编译,即 NGEN。它为特定的 CPU 类型创建本机映像。但是,如果您已经深入研究了这个领域,就应该知道这点。

  3. 对于 .dll 文件,请选择它们的“Any”CPU。对于 .EXE(入口点),您必须选择 Any、x86 或 x64。需要考虑一些事情:使用 x86 的 .Net 应用程序访问本机 Windows .dll 文件(interpo)需要 x86 .dll 文件。因此,64 位应用程序无法访问 32 位 API 调用,反之亦然。这通常是 .Net 应用程序在 64 位操作系统上失败的原因。解决方法是引用正确的 .dll 或者在属性下直接将 .Net 应用程序设置为 x86(32 位)。如果所有其他依赖项都设置为“Any”,则它们将在 JIT 编译时自动变为 32 位。

  4. 64 位的优点比较复杂。根据您的应用程序有不同的优缺点。最明显的优势是您的应用程序可以突破 2GB 内存限制。缺点如 #3 所述,如果您引用了 64 位的 .dll,则您的应用程序无法在 32 位操作系统上执行。

  5. 一切都是开箱即用的。不要担心任何事情,除了上面提到的所有内容。:)


1
如果我必须进行 machine.config 更改,应该选择哪个文件夹?FW64 还是 FW? - Prashanth Subramanian

0
  1. 如果您正在为 Any CPU 编译代码,则 x64 会尝试将本地的外部 DLL 作为 x64 版本加载。如果该 DLL 是 32 位的,则可能会出现问题。它会抛出异常。
  2. 是的,您可以将其构建为 Any CPU
  3. 参见第1点
  4. 它(可以)在内部使用操作系统的 x64 优势,如4GB+内存等。
  5. 不,这是由 .NET 安装程序默认完成的。

0
  1. 有适用于32位或64位平台(操作系统)的模式
  2. 可以的 - 实际上,VS会在x86计算机上安装32位版本的CLR,并在64位Windows上安装32位和64位(两者都是)版本的CLR。由于VS是32位应用程序,在64位计算机上运行在WOW64下。
  3. 许多应用程序在32位CLR和64位CLR上表现相同。但是,可能会存在一些差异(例如使用Int32而不是IntPtr处理句柄的不正确平台调用)
  4. 与64位操作系统相对于x86操作系统的优点相同
  5. 如果您正在使用64位Windows和VS2010,则拥有开发.NET x64所需的所有内容

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接