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


我想知道.NET模式x86和x64之间的区别。

  1. 两种模式有什么区别?

  2. 我可以编译我的库,例如使用.NET x64和.NET x86吗?

  3. 如果我选择x64而不是x86,对我来说会有什么不同吗?

  4. .NET x64的优点是什么?

  5. 如果我想使用.NET x64,是否必须安装任何特殊内容?


11298
2017-12-28 10:36


起源

通常,你这样做 不 明确地编译你的库32或64位但是对于“任何cpu”并让目标机器(或你的主应用程序)选择运行。 - Uwe Keim
如果您选择一种模式,该应用程序将更轻但无法在另一个平台上运行... - ykatchou


答案:


复杂的问题,我会尽量简化:

  1. 可以同时为x86(32位)和x64(64位)编译任何.Net应用程序。实际上他们默认做。您可以通过在项目属性中的“生成”选项卡中更改目标CPU来更改此设置。支持的目标是“Any”(根据操作系统支持将Just-In-Time编译为32或64位),“x86”将编译为32位,适用于所有平台,“x64”将编译为64 -bit仅适用于64位平台。

  2. 是。往上看。还要注意,有时会执行第二级编译,那就是NGEN。它为特定的CPU类型创建本机映像。但是,如果你搞砸了这个,你就知道了。

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

  4. 64位的优点很复杂。根据您的应用程序的功能,有优点和缺点。最明显的优势是您的应用程序可以打破2GB内存屏障。缺点如#3中所述,如果您引用64位.dll,您的应用程序将无法在32位操作系统上执行。

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


14
2017-12-28 10:44





  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所需的一切

0
2017-12-28 10:47





  1. 如果您正在编译代码 任何CPU,x64尝试将本机外部DLL加载为x64版本。如果该DLL是32位,那可能会有问题。它引发了一个例外。
  2. 是的,您可以将其构建为 任何CPU
  3. 秒。 1
  4. 它(可以)内部使用操作系统的x64优点,如4GB +内存等。
  5. 不,这是由.NET安装程序默认完成的。

0
2017-12-28 10:46